添加一组带循环的集合

use*_*054 0 java loops set

下面代码的输出是[[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);
Run Code Online (Sandbox Code Playgroud)

Lui*_*oza 5

问题是你在中添加了相同的Set<String> numbers变量Set<Set<String>> mySetOfSets.您必须Set<String> numbers在每个循环迭代中创建一个新的实例.

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

在您的代码中应用建议的修补程序之前,您这样做:

  1. 有单身Set<String> numbers.
  2. 清除其物品.
  3. 添加新项目numbers.
  4. 添加numbers到Set<Set<String>> mySetOfSets.
  5. 回到第2点.

通过在代码中应用建议的修复,现在您正在执行此操作:

  1. 创建一个新实例Set<String> numbers将与以前的Set<String>实例不同.
  2. 清除它的项目(请注意,这应该被删除,因为它是一个新Set<String>的,没有必要清除它).
  3. 添加新项目numbers.
  4. 添加numbers到Set<Set<String>> mySetOfSets.
  5. 回到第1点.