(4, 2), (8, 10), (1, 1), (9, 12), (14, 7), (2, 3)
现在,我需要打印Sa.using单个迭代器我无法打印
HashSet<Set<Set<int[]>>> Sa=new HashSet<Set<Set<int[]>>>();
这不起作用
答案 0 :(得分:1)
在这里,假设您的Set
个对象和数组有多个级别,则必须遍历每个级别。
Iterator<Set<Set<int[]>>> iter = Sa.iterator();
Iterator<Set<int[]>> innerIter;
Iterator<int[]> deepIter;
while (iter.hasNext()) {
innerIter = iter.next().iterator();
while(innerIter.hasNext()){
deepIter = innerIter.next().iterator();
while(deepIter.hasNext()){
System.out.println(Arrays.toString(deepIter.next()));
}
}
}
答案 1 :(得分:1)
首先,您不应该使用原始数据类型,如int
和Generic类。因此,取代int[]
使用List<Integer>
。
现在,如果您真的只想使用一个 Iterator
,那么您可以像这样使用一堆for-each
循环 -
for (Set<Set<List<Integer>>> aSa : Sa) {
for (Set<List<Integer>> bSa : aSa) {
Iterator<List<Integer>> iter = bSa.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}
}
}
完整的测试代码 -
HashSet<Set<Set<List<Integer>>>> Sa = new HashSet<>();
// Creating dummy data
// Two List of Integers
List<Integer> listInt1 = new ArrayList<>();
List<Integer> listInt2 = new ArrayList<>();
// Populating the list
for (int i = 0; i < 4; i++) {
listInt1.add(i);
listInt2.add(i+30);
}
// Data structure of Sa.
Set<List<Integer>> setOfIntLists1 = new HashSet<>();
Set<List<Integer>> setOfIntLists2 = new HashSet<>();
setOfIntLists1.add(listInt1);
setOfIntLists1.add(listInt2);
setOfIntLists2.add(listInt2);
setOfIntLists2.add(listInt1);
Set<Set<List<Integer>>> setOfset1 = new HashSet<>();
Set<Set<List<Integer>>> setOfset2 = new HashSet<>();
setOfset1.add(setOfIntLists1);
setOfset1.add(setOfIntLists2);
setOfset2.add(setOfIntLists2);
setOfset2.add(setOfIntLists1);
// Adding data to Sa
Sa.add(setOfset1);
Sa.add(setOfset2);
for (Set<Set<List<Integer>>> aSa : Sa) {
for (Set<List<Integer>> bSa : aSa) {
Iterator<List<Integer>> iter = bSa.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}
}
}
}
<强>输出强>
[0, 1, 2, 3]
[30, 31, 32, 33]