HashSet 中出现重复项
Duplicates is coming in HashSet
在我的 android 开发中,我从 api 获取特定数据。我使用这些数据迭代创建 HashSet。此实现的目的是删除重复项。但仍然重复呈现。
for(int i=0;i<array.length();i++) {
HashSet<String> hashSetObject = new HashSet<String>();
hashSetObject.add(leagueName);
Log.d("HASHSET","values in HashSet object " + hashSetObject.toString());
}
在上面的编码中,leagueName
是来自 api 的字符串。此代码的输出如下...
D/HASHSET: values in HashSet object [League One]
D/HASHSET: values in HashSet object [Championship]
D/HASHSET: values in HashSet object [Premiership]
D/HASHSET: values in HashSet object [Championship]
D/HASHSET: values in HashSet object [League One]
D/HASHSET: values in HashSet object [Premiership]
.....
我需要一个没有重复的 HashSet。请帮助我。
您的循环在循环的每一次迭代中都会创建一个新集合:
for(int i=0;i<array.length();i++) {
HashSet<String> hashSetObject = new HashSet<String>(); // <-- new HashSet every time
hashSetObject.add(leagueName);
Log.d("HASHSET","values in HashSet object " + hashSetObject.toString());
}
将您的代码更改为:
HashSet<String> hashSetObject = new HashSet<String>();
for(int i=0;i<array.length();i++) {
hashSetObject.add(leagueName);
Log.d("HASHSET","values in HashSet object " + hashSetObject.toString());
}
编辑以解决日志记录问题:
您遇到的第二个问题是日志记录。当前循环正确地将元素添加到集合中,但是每次循环时日志都会输出整个集合中的内容。
最好只循环遍历最后一组。
更改您当前的代码:
HashSet<String> hashSetObject = new HashSet<String>();
for(int i=0;i<array.length();i++) {
hashSetObject.add(leagueName);
Log.d("HASHSET","values in HashSet object " + hashSetObject.toString());
}
像这样:
// Create set
HashSet<String> hashSetObject = new HashSet<String>();
// Add elements to the set
for(int i=0;i<array.length();i++) {
hashSetObject.add(leagueName);
}
// Read each element from the set
for (String valueInSet : hashSetObject) {
Log.d("HASHSET","value in HashSet object " + valueInSet);
}
每次循环遍历时,您都在创建 hashset 的新实例。
您最终会得到与数组元素一样多的哈希集。
这样做:
List<String> al = new ArrayList<>();
for(int i=0;i<array.length();i++) {
al.add(leagueName);
}
Set<String> hashSetObject = new HashSet<>();
hashSetObject.addAll(al);
或者如果你的array
是List<String>
,你可以直接调用
Set<String> hashSetObject = new HashSet<>();
hashSetObject.addAll(array);
在我的 android 开发中,我从 api 获取特定数据。我使用这些数据迭代创建 HashSet。此实现的目的是删除重复项。但仍然重复呈现。
for(int i=0;i<array.length();i++) {
HashSet<String> hashSetObject = new HashSet<String>();
hashSetObject.add(leagueName);
Log.d("HASHSET","values in HashSet object " + hashSetObject.toString());
}
在上面的编码中,leagueName
是来自 api 的字符串。此代码的输出如下...
D/HASHSET: values in HashSet object [League One]
D/HASHSET: values in HashSet object [Championship]
D/HASHSET: values in HashSet object [Premiership]
D/HASHSET: values in HashSet object [Championship]
D/HASHSET: values in HashSet object [League One]
D/HASHSET: values in HashSet object [Premiership]
.....
我需要一个没有重复的 HashSet。请帮助我。
您的循环在循环的每一次迭代中都会创建一个新集合:
for(int i=0;i<array.length();i++) {
HashSet<String> hashSetObject = new HashSet<String>(); // <-- new HashSet every time
hashSetObject.add(leagueName);
Log.d("HASHSET","values in HashSet object " + hashSetObject.toString());
}
将您的代码更改为:
HashSet<String> hashSetObject = new HashSet<String>();
for(int i=0;i<array.length();i++) {
hashSetObject.add(leagueName);
Log.d("HASHSET","values in HashSet object " + hashSetObject.toString());
}
编辑以解决日志记录问题: 您遇到的第二个问题是日志记录。当前循环正确地将元素添加到集合中,但是每次循环时日志都会输出整个集合中的内容。
最好只循环遍历最后一组。
更改您当前的代码:
HashSet<String> hashSetObject = new HashSet<String>();
for(int i=0;i<array.length();i++) {
hashSetObject.add(leagueName);
Log.d("HASHSET","values in HashSet object " + hashSetObject.toString());
}
像这样:
// Create set
HashSet<String> hashSetObject = new HashSet<String>();
// Add elements to the set
for(int i=0;i<array.length();i++) {
hashSetObject.add(leagueName);
}
// Read each element from the set
for (String valueInSet : hashSetObject) {
Log.d("HASHSET","value in HashSet object " + valueInSet);
}
每次循环遍历时,您都在创建 hashset 的新实例。 您最终会得到与数组元素一样多的哈希集。
这样做:
List<String> al = new ArrayList<>();
for(int i=0;i<array.length();i++) {
al.add(leagueName);
}
Set<String> hashSetObject = new HashSet<>();
hashSetObject.addAll(al);
或者如果你的array
是List<String>
,你可以直接调用
Set<String> hashSetObject = new HashSet<>();
hashSetObject.addAll(array);