添加一组带循环的集合

时间:2013-07-26 15:13:30

标签: 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);

1 个答案:

答案 0 :(得分: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...
}

在您的代码中应用建议的修补程序之前,您正在执行此操作:

  1. 只有一个Set<String> numbers
  2. 清除其物品。
  3. 将新项目添加到numbers
  4. numbers添加到Set<Set<String>> mySetOfSets
  5. 回到第2点。
  6. 通过在代码中应用建议的修补程序,现在您正在执行此操作:

    1. 创建Set<String> numbers的新实例,该实例将与之前的Set<String>个实例不同。
    2. 清除其项目(请注意,这应该被删除,因为它是一个新的Set<String>,并且无需清除它。
    3. 将新项目添加到numbers
    4. numbers添加到Set<Set<String>> mySetOfSets
    5. 回到第1点。