получение исключения одновременной модификации только для попытки прочитать элемент ArrayList - PullRequest
1 голос
/ 02 апреля 2012

Я знаю, что получу это исключение, когда попытаюсь изменить или удалить из списка, но только для чтения из него ?!Какое здесь решение?

public boolean recieveHello(Neighbor N, HelloMsg H) {
        Iterator<Neighbor> I = NTable.iterator();
        Iterator<Neighbor> J = NTable.iterator();
        if(!J.hasNext()) {
            this.NTable.add(N);
        }

        while(I.hasNext()) {
            if(I.next().nid == N.getnid()) {  /*EXCEPTION IS HERE*/
                //case where the node is already present in the NTable
            }
            else {
                N.setnhrc(0);  
                this.NTable.add(N);
                //case where the node is to be added to the NTable
            }
        }
        return true;
    }

Кстати, я должен отметить, что NTable является arrayList и является членом класса, чей метод это

EDIT

Я решил проблему, используя ::

public boolean recieveHello(Neighbor N, HelloMsg H) {
        Iterator<Neighbor> I = NTable.iterator();
        Iterator<Neighbor> J = NTable.iterator();
        if(!J.hasNext()) {
            this.NTable.add(N);
        }
        boolean flag = false;
        for (int i=0; i<NTable.size(); i++) {
            if(NTable.get(i).nid == N.getnid()) {
                //case where the node is already present in the NTable
            }
            else {
                flag = true;
                N.setnhrc(0);  
                this.NTable.add(N);
                //case where the node is to be added to the NTable
            }
        }
        if(flag == true) {

        }
        return true;
    }

1 Ответ

8 голосов
/ 02 апреля 2012

Что ж, вы изменяете размер списка, повторяя его, когда говорите

  this.NTable.add(N);

Итак, вместо этого следите за тем, какие из них добавить в отдельный список, а затем добавляйте элементы послепервая итерация.

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