0

Java Set 不能有重复的值。这是我的代码:

Set<String> set = new HashSet<String>();
Collections.addAll(set, arr);

如果数组 arr 具有相同值的元素,则 set 将具有重复的字符串值,为什么会发生这种情况?

我错过了哪里?我应该迭代数组并使用 add 方法吗?

==================================================== ===========

对不起,上面的代码有效。我在数组 arr 中犯了一个错误。这是一个空白的东西。

4

4 回答 4

4

当我运行以下代码时,它表明该集合不包含重复项:

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

你的琴弦一定有什么不同。

于 2012-05-31T01:13:13.083 回答
1

很可能这些对象实际上并不相等,因此它们不是同一个对象。如果您查看java.util.HashSet.add()的 javadocs ,您会看到用于确定对象是否已经存在的比较使用 .equals()。确保你的 2 个字符串没有任何不同会使 String.equals() 返回 false。

于 2012-05-31T01:02:03.223 回答
1

我看不出这是怎么发生的,因为您使用的是正确实现 equals 的字符串。

以下代码为两个数组打印“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());
    }
}
于 2012-05-31T01:04:29.903 回答
1

你误会了。ASet永远不会包含重复项。不,您不需要迭代和使用该add方法。

回去再看看。什么值是重复的?如果将数组添加到 a 会发生什么List<String>

于 2012-05-31T01:15:48.647 回答