Java 在算法中分离唯一值

Java 在算法中分离唯一值,java,Java,我正在将一系列90000多个字符串分解为一个离散列表,其中包含单个的、不重复的单词对,这些单词对包含在字符串中,并且与每个字符串关联的rxcui id值。我开发了一种方法,试图实现这一点,但它产生了大量冗余。对数据的分析表明,在我清理并格式化字符串内容后,90000多个源字符串中大约有12000个唯一的单词 如何更改下面的代码,以避免在目标2D ArrayList(如代码下面所示)中创建冗余行 公共静态数组列表 如何更改上面的代码,使输出成为唯一的名称/rxcui值对列表,汇总当前输出中的所有

我正在将一系列90000多个字符串分解为一个离散列表,其中包含单个的、不重复的单词对,这些单词对包含在字符串中,并且与每个字符串关联的rxcui id值。我开发了一种方法,试图实现这一点,但它产生了大量冗余。对数据的分析表明,在我清理并格式化字符串内容后,90000多个源字符串中大约有12000个唯一的单词

如何更改下面的代码,以避免在目标2D ArrayList(如代码下面所示)中创建冗余行

公共静态数组列表


如何更改上面的代码,使输出成为唯一的名称/rxcui值对列表,汇总当前输出中的所有相关数据,同时仅删除冗余?

唯一单词ID的用途是什么?由于您没有保存副本,单词本身是否不够独特

一个非常基本的方法是在你检查生词的时候让计数器继续工作。对于每个不存在的单词,可以增加计数器并使用新值作为唯一id

最后,我建议您使用HashMap。它将允许您在O(1)时间内插入和检索单词。我不完全确定你要做什么,但我认为HashMap可能会给你更多的范围

Edit2: 这将是一个稍微沿着这些路线。这应该对你有所帮助

public static Set<DataPair> getAllWords(String[] tempsArray) {
    Set<DataPair> set = new HashSet<>();
    for (String row : tempsArray) {
        // PARSE YOUR STRING DATA
        // the way you were doing it seemed fine but something like this
        String[] rowArray = row.split(" ");
        String word = row[1];
        int id = Integer.parseInt(row[0]);
        DataPair pair = new DataPair(word, id);
        set.add(pair);
    }
    return set;
} 

class DataPair {
    private String word;
    private int id;

    public DataPair(String word, int id) {
        this.word = word;
        this.id = id;
    }

    public boolean equals(Object o) {
        if (o instanceof DataPair) {
            return ((DataPair) o).word.equals(word) && ((DataPair) o).id == id;
        }
        return false;
    }
}
public静态集合getAllWords(字符串[]tempsArray){
Set=newhashset();
用于(字符串行:tempsArray){
//解析字符串数据
//你做这件事的方式似乎很好,但像这样
字符串[]行数组=行。拆分(“”);
字符串字=行[1];
int id=Integer.parseInt(行[0]);
数据对=新数据对(字,id);
集合。添加(对);
}
返回集;
} 
类数据对{
私有字符串字;
私有int-id;
公共数据对(字符串字,整数id){
这个单词=单词;
this.id=id;
}
公共布尔等于(对象o){
if(数据对的o实例){
返回((数据对)o.word.equals(word)和((数据对)o.id==id;
}
返回false;
}
}

唯一单词ID的用途是什么?由于您没有保存副本,单词本身是否不够独特

一个非常基本的方法是在你检查生词的时候让计数器继续工作。对于每个不存在的单词,可以增加计数器并使用新值作为唯一id

最后,我建议您使用HashMap。它将允许您在O(1)时间内插入和检索单词。我不完全确定你要做什么,但我认为HashMap可能会给你更多的范围

Edit2: 这将是一个稍微沿着这些路线。这应该对你有所帮助

public static Set<DataPair> getAllWords(String[] tempsArray) {
    Set<DataPair> set = new HashSet<>();
    for (String row : tempsArray) {
        // PARSE YOUR STRING DATA
        // the way you were doing it seemed fine but something like this
        String[] rowArray = row.split(" ");
        String word = row[1];
        int id = Integer.parseInt(row[0]);
        DataPair pair = new DataPair(word, id);
        set.add(pair);
    }
    return set;
} 

class DataPair {
    private String word;
    private int id;

    public DataPair(String word, int id) {
        this.word = word;
        this.id = id;
    }

    public boolean equals(Object o) {
        if (o instanceof DataPair) {
            return ((DataPair) o).word.equals(word) && ((DataPair) o).id == id;
        }
        return false;
    }
}
public静态集合getAllWords(字符串[]tempsArray){
Set=newhashset();
用于(字符串行:tempsArray){
//解析字符串数据
//你做这件事的方式似乎很好,但像这样
字符串[]行数组=行。拆分(“”);
字符串字=行[1];
int id=Integer.parseInt(行[0]);
数据对=新数据对(字,id);
集合。添加(对);
}
返回集;
} 
类数据对{
私有字符串字;
私有int-id;
公共数据对(字符串字,整数id){
这个单词=单词;
this.id=id;
}
公共布尔等于(对象o){
if(数据对的o实例){
返回((数据对)o.word.equals(word)和((数据对)o.id==id;
}
返回false;
}
}

唯一单词ID的用途是什么?由于您没有保存副本,单词本身是否不够独特

一个非常基本的方法是在你检查生词的时候让计数器继续工作。对于每个不存在的单词,可以增加计数器并使用新值作为唯一id

最后,我建议您使用HashMap。它将允许您在O(1)时间内插入和检索单词。我不完全确定你要做什么,但我认为HashMap可能会给你更多的范围

Edit2: 这将是一个稍微沿着这些路线。这应该对你有所帮助

public static Set<DataPair> getAllWords(String[] tempsArray) {
    Set<DataPair> set = new HashSet<>();
    for (String row : tempsArray) {
        // PARSE YOUR STRING DATA
        // the way you were doing it seemed fine but something like this
        String[] rowArray = row.split(" ");
        String word = row[1];
        int id = Integer.parseInt(row[0]);
        DataPair pair = new DataPair(word, id);
        set.add(pair);
    }
    return set;
} 

class DataPair {
    private String word;
    private int id;

    public DataPair(String word, int id) {
        this.word = word;
        this.id = id;
    }

    public boolean equals(Object o) {
        if (o instanceof DataPair) {
            return ((DataPair) o).word.equals(word) && ((DataPair) o).id == id;
        }
        return false;
    }
}
public静态集合getAllWords(字符串[]tempsArray){
Set=newhashset();
用于(字符串行:tempsArray){
//解析字符串数据
//你做这件事的方式似乎很好,但像这样
字符串[]行数组=行。拆分(“”);
字符串字=行[1];
int id=Integer.parseInt(行[0]);
数据对=新数据对(字,id);
集合。添加(对);
}
返回集;
} 
类数据对{
私有字符串字;
私有int-id;
公共数据对(字符串字,整数id){
这个单词=单词;
this.id=id;
}
公共布尔等于(对象o){
if(数据对的o实例){
返回((数据对)o.word.equals(word)和((数据对)o.id==id;
}
返回false;
}
}

唯一单词ID的用途是什么?由于您没有保存副本,单词本身是否不够独特

一个非常基本的方法是在你检查生词的时候让计数器继续工作。对于每个不存在的单词,可以增加计数器并使用新值作为唯一id

最后,我建议您使用HashMap。它将允许您在O(1)时间内插入和检索单词。我不完全确定你要做什么,但我认为HashMap可能会给你更多的范围

Edit2: 这将是一个稍微沿着这些路线。这应该对你有所帮助

public static Set<DataPair> getAllWords(String[] tempsArray) {
    Set<DataPair> set = new HashSet<>();
    for (String row : tempsArray) {
        // PARSE YOUR STRING DATA
        // the way you were doing it seemed fine but something like this
        String[] rowArray = row.split(" ");
        String word = row[1];
        int id = Integer.parseInt(row[0]);
        DataPair pair = new DataPair(word, id);
        set.add(pair);
    }
    return set;
} 

class DataPair {
    private String word;
    private int id;

    public DataPair(String word, int id) {
        this.word = word;
        this.id = id;
    }

    public boolean equals(Object o) {
        if (o instanceof DataPair) {
            return ((DataPair) o).word.equals(word) && ((DataPair) o).id == id;
        }
        return false;
    }
}
公共静态设置getAllWords(Stri)
public MyObject(String str, int rxcui); // The constructor for your new object
MyObject mo1 = new MyObject("hello", 5);
mySet.add(myObject);
myMap.put(mo1.getStr, mo1.getRxcui);