我使用以下方式加入先验连接步骤中生成的集合
Iterator<Entry<List<Integer>, Integer>> i1 = hm.entrySet().iterator() ;
Iterator<Entry<List<Integer>, Integer>> i2 = hm.entrySet().iterator() ;
while(i1.hasNext()) {
while(i2.hasNext()) {
Entry<List<Integer>, Integer> pair1 = i1.next() ;
Entry<List<Integer>, Integer> pair2 = i2.next() ;
// Do some joining part here
System.out.println(pair1.getKey());
System.out.println(pair2.getKey());
}
}
}
实际上,我认为它会遍历 HashMap 的所有 n*n 值。但是正在发生的事情是两个迭代器都在并行执行并且只执行 n 次,就好像两个迭代器是相同的一样。请提出一种方法来克服这个问题。
最佳答案
您必须在外循环中创建第二个迭代器,以便它在每次内循环迭代之前重新开始迭代条目。
另一个必需的更改是获取内部循环之外的第一个迭代器的当前条目。
Iterator<Entry<List<Integer>, Integer>> i1 = hm.entrySet().iterator() ;
while(i1.hasNext()) {
Entry<List<Integer>, Integer> pair1 = i1.next() ;
Iterator<Entry<List<Integer>, Integer>> i2 = hm.entrySet().iterator() ;
while(i2.hasNext()) {
Entry<List<Integer>, Integer> pair2 = i2.next() ;
// Do some joining part here
System.out.println(pair1.getKey());
System.out.println(pair2.getKey());
}
}
}
关于java - 在 Java 中对 Hash Map 进行两次迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33730692/