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