首页 > 解决方案 > 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。请帮我。

标签: androidhashset

解决方案


您的循环正在循环的每次迭代中创建一个新集合:

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

推荐阅读