以下代码的输出为[[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);
答案 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...
}
在您的代码中应用建议的修补程序之前,您正在执行此操作:
Set<String> numbers
。numbers
。numbers
添加到Set<Set<String>> mySetOfSets
。通过在代码中应用建议的修补程序,现在您正在执行此操作:
Set<String> numbers
的新实例,该实例将与之前的Set<String>
个实例不同。Set<String>
,并且无需清除它。numbers
。numbers
添加到Set<Set<String>> mySetOfSets
。