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);

或者如果你的arrayList<String>,你可以直接调用

Set<String> hashSetObject = new HashSet<>();
hashSetObject.addAll(array);