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> numbersSet<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. 添加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 回答