如何在Java中将一个迭代器的内容传递给另一个迭代器?

时间:2012-03-13 18:16:58

标签: java arraylist iterator

我有两个列表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;
        }
    }

然而,在我运行代码后,我意识到我传递的内容是bIttempIt的引用而不是内容。如果我真的想使用迭代器来实现这个目标,有什么解决方案吗?非常感谢!

2 个答案:

答案 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));
            }
        }
    }
}

或类似的东西---我没有编译,但这是正确的想法。