Java Set不能具有重复值。这是我的代码:
Set<String> set = new HashSet<String>();
Collections.addAll(set, arr);
如果数组arr的元素具有相同的值,则set将具有重复的字符串值,为什么会发生?
我在哪里想念?我应该迭代数组并使用add方法吗?
=============================================== ==============
抱歉,以上代码有效。我在数组arr中犯了一个错误。这是一个空白的东西。
答案 0 :(得分:2)
当我运行以下代码时,它表明该集合不包含重复项:
class FunkTest
{
public static void main (String [] args)
{
Set<String> theHash = new HashSet<String>();
String[] theArray = new String[] {
"funky",
"garbage",
"funky",
"stuff",
"things",
"item",
"funky",
"funky"
};
Collections.addAll(theHash, theArray);
for (String thisItem : theHash) {
System.out.println(thisItem);
}
}
}
输出:
stuff
funky
item
things
garbage
你的琴弦必须有不同的东西。
答案 1 :(得分:1)
对象很可能实际上并不相同,因此它们不是同一个对象。如果查看java.util.HashSet.add()的javadoc,您将看到用于确定对象是否已存在的比较使用.equals()。确保你的2个字符串没有任何不同的方式使String.equals()返回false。
答案 2 :(得分:1)
我无法看到这是如何发生的,因为你正在使用已经正确实现了等效的字符串。
以下代码为两个数组打印“1”。你确定你没有犯错吗?
import java.util.Set;
import java.util.HashSet;
import java.util.Collections;
class Main
{
public static void main(String[] args)
{
String[] arr1 = new String[]{"one","one"};
Set<String> set1 = new HashSet<String>();
Collections.addAll(set1, arr1);
System.out.println(set1.size());
String[] arr2 = new String[]{"two",new String("two")};
Set<String> set2 = new HashSet<String>();
Collections.addAll(set2, arr2);
System.out.println(set2.size());
}
}
答案 3 :(得分:0)
你错了。 Set
永远不会包含重复内容。不,您不需要迭代并使用add
方法。
回去看看。什么价值重复?如果将数组添加到List<String>
,会发生什么?