Как передать содержимое одного итератора другому в Java? - PullRequest
0 голосов
/ 13 марта 2012

У меня есть два списка 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, а не содержание.Есть ли решение, если я действительно хочу использовать итератор для достижения этой цели?Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 13 марта 2012

Похоже, что вы хотите клонировать свой итератор, что не поддерживается в Java (метод clone() является закрытым). Как примечание, итератор не содержит данных, вы должны рассматривать его как интерфейс для списка. Так что, возможно, итераторы - не самое идеальное решение здесь.

0 голосов
/ 13 марта 2012

Я подозреваю, что есть более простой способ сделать это, а именно - не использовать итераторы, а использовать сами списки.

Так что, если ваши списки A и B равны ArrayList<Integer> s, это может выглядеть примерно так:

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

Или что-то в этом роде --- Я не скомпилировал это, но это правильная идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...