Можно ли добавить элементы в LinkedList
при повторении?Можно ли добавлять элементы в связанный список при итерации
class Worker {
final LinkedList<Foo> worklist = new LinkedList<>();
public void work() {
Iterator<Foo> iterator = worklist.iterator();
while (iterator.hasNext()) {
Foo foo = iterator.next();
doSomethingWith(foo);
}
}
public void doSomethingWith(Foo foo) {
// do something with foo
// and possibly add one (or more) foo's to the worklist
if (expression) {
worklist.add(new Foo());
}
}
}
Если нет, то как это поведение может быть реализовано безопасным и эффективным способом?
Обратите внимание, что это не about a List
, но конкретно о LinkedList
. Если это небезопасно, я спрашиваю об альтернативах.
http://stackoverflow.com/questions/3362018/is-linkedlist-thread-safe-when-im-accessing-it-with-offer-and-poll-exclusive Возможность изменять значения в списке при повторении также является свойством, связанным с многопоточным. Общее правило, если список может использовать итератор, он не является потокобезопасным. –
Если вы измените список во время итерации по нему, он выкинет ConcurrentModificationException. – YoungHobbit
Почему бы не использовать ListIterator и добавить элемент с помощью итератора? Мы можем получить к нему доступ с помощью worklist.listIterator() –