0

以下のコードの出力は [[3],[3],[3],[3]] です。
[[0],[1],[2],[3]] セットのセットはそのサイズを保持しているように見えますが、ループを介してその要素は保持していないようです。

Set<Set<String>> mySetOfSets = new HashSet<Set<String>>();
mySetOfSets.clear();            

Set<String> numbers = new HashSet<String>(); 

for(int i=0; i<4 ; i++)
 {
    numbers.clear();
    String iAsString = String.valueOf(i);
    numbers.add(iAsString);
        mySetOfSets.add(numbers);                       
 }
   System.out.println( mySetOfSets);
4

1 に答える 1

5

問題は、同じSet<String> numbers変数を に追加していることですSet<Set<String>> mySetOfSetsSet<String> numbers各ループ反復の新しいインスタンスを作成する必要があります。

for(int i=0; i<4 ; i++) {
    Set<String> numbers = new HashSet<String>(); 
    //rest of your code...
}

提案された修正をコードに適用する前に、次のことを行っていました。

  1. シングルを持つSet<String> numbers
  2. そのアイテムをクリアします。
  3. に新しいアイテムを追加しnumbersます。
  4. に追加numbersSet<Set<String>> mySetOfSetsます。
  5. ポイント2に戻ります。

提案された修正をコードに適用すると、次のようになります。

  1. その新しいインスタンスの作成はSet<String> numbers、以前のインスタンスとは異なりSet<String>ます。
  2. そのアイテムをクリアします (これは新しいものであり、クリアする必要がないため、削除する必要があることに注意してくださいSet<String>)。
  3. に新しいアイテムを追加しnumbersます。
  4. に追加numbersSet<Set<String>> mySetOfSetsます。
  5. ポイント1に戻ります。
于 2013-07-26T15:14:44.530 に答える