Java集中的重复值

时间:2012-05-31 00:56:25

标签: java collections set

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

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

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

我在哪里想念?我应该迭代数组并使用add方法吗?

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

抱歉,以上代码有效。我在数组arr中犯了一个错误。这是一个空白的东西。

4 个答案:

答案 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>,会发生什么?