К сожалению, нет легкого пути обойти это.Как уже говорили другие, вы не можете изменить коллекцию внутри этого вида цикла.Другой вариант - использовать обычный цикл for.Однако для доступа к LinkedList
по индексу, например:
for(int i = 0; i < list.size(); i++) {
list.get(i);
}
, требуется O (N) времени для каждого элемента , потому что связанный список необходимо обходить каждый раз с самого начала.
Если связанный список не важен для вашего алгоритма, я предлагаю вам использовать ArrayList
и изменить код следующим образом:
for(int i = 0; i < itemsList.size(); i++) {
itm = itemsList.get(i);
if(itm.equals(item)) {
int value = itm.getCounter();
value++;
itm.setCounter(value);
pw.println(itm.getCounter());
} else {
item.initCounter();
itemsList.add(item);
pw.println("It's the first time you connect to server!");
}
}
Это не приведет к исключению,но это все еще не очень хороший кусок кода , потому что вы добавляете в список во время итерации, и это никогда не будет хорошей идеей .
Надеюсь, у вас хватит терпения читать до сих пор!
Последнее, что я могу вам предложить - это сохранить временный список элементов, которые вам нужныдобавить и добавить их в начальный список в конце цикла.Таким образом, вы можете сохранить весь свой оригинальный код и LinkedList :
LinkedList<ItemClient> tempList = new LinkedList<ItemClient>();
for(ItemClient itm: itemsList) {
itm = itemsList.get(i);
if(itm.equals(item)) {
int value = itm.getCounter();
value++;
itm.setCounter(value);
pw.println(itm.getCounter());
} else {
item.initCounter();
tempList.add(item);
pw.println("It's the first time you connect to server!");
}
}
itemsList.addAll(tempList);