我有两个列表a = {1,2,2,5,6,6,6,7}
和b = {2,3,3,6,6,6,8}
我想获得等效元素,在这种情况下,输出应该是2 *(2 = 2)和9 *(6 = 6)这是我的代码的一部分
Iterator aIt = a.iterator();
Iterator bIt = b.iterator();
Iterator tempIt = b.iterator();
int aNode = (Integer)aIt.next();
int bNode = (Integer)bIt.next();
Boolean isEquals = false;
while(aIt.hasNext()||bIt.hasNext()){
while(aNode<bNode){
aNode = (Integer)aIt.next();
}
while(aNode>bNode){
bNode = (Integer)bIt.next();
}
while(aNode==bNode){
tempIt = bIt;
while(aNode==bNode){
System.out.println(aNode + " = " + bNode);
bNode = (Integer)tempIt.next();
}
aNode = (Integer)aIt.next();
tempIt = bIt;
bNode = (Integer)tempIt.next();
isEquals = true;
}
if(isEquals){
bIt = tempIt;
isEquals = false;
}
}
然而,在我运行代码后,我意识到我传递的内容是bIt
对tempIt
的引用而不是内容。如果我真的想使用迭代器来实现这个目标,有什么解决方案吗?非常感谢!
答案 0 :(得分:2)
听起来你想克隆你的迭代器,这是Java不支持的东西(clone()
方法是私有的)。
正如注释,迭代器不包含数据,您应该将其视为列表的接口。因此,迭代器可能不是最理想的解决方案。
答案 1 :(得分:-1)
我怀疑有一种更简单的方法 - 即不使用迭代器,而是使用列表本身。
因此,如果您的列表A和B为ArrayList<Integer>
,则可能如下所示:
public void printMatch(ArrayList<Integer> A, ArrayList<Integer> B) {
for(int i = 0; i < A.length(); i++) {
for(int j = 0; j < B.length(); j++) {
if(A.get(i).equals(B.get(j))) {
System.out.println("Match!" + A.get(i));
}
}
}
}
或类似的东西---我没有编译,但这是正确的想法。