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

あなたは間違っています。ASetに重複が含まれることはありません。いいえ、メソッドを反復して使用する必要はありませんadd

戻ってもう一度見てください。重複している値は何ですか? List<String>代わりに配列を a に追加するとどうなりますか?

于 2012-05-31T01:15:48.647 に答える
1

ほとんどの場合、オブジェクトは実際には等しくないため、同じオブジェクトではありません。java.util.HashSet.add()の javadoc を見ると、オブジェクトが既に存在するかどうかを判断するための比較で .equals() が使用されていることがわかります。String.equals() が false を返すように、2 つの文字列に違いがないことを確認してください。

于 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 に答える