У меня следующая проблема:
Данный:
public class A{
Collection<B> elements = new ArrayList<B>();
}
public class B{
Collection<B> linkedElements = new ArrayList<B>();
}
Все элементы connectedElements тоже принадлежат элементам. Я хочу, чтобы каждый раз, когда элемент удаляется из коллекции элементов, связанные с ним элементы также удаляются из этой коллекции. Я пробовал подключить наблюдателя к операции Iterator.remove и запустить там удаление связанных элементов из списка элементов, но из-за самой логики я всегда сталкиваюсь с ConcurrentModificationException.
Обновление: это код, вызывающий ошибку:
public class A{
Collection<B> elements = new ArrayList<B>(){
public Iterator<B> iterator() {
return new ProxyIterator(super.iterator());
};
private class ProxyIterator implements Iterator{
Iterator it;
Object lastObject;
public ProxyIterator(Iterator proxied){
it = proxied;
}
@Override
public boolean hasNext() {
return it.hasNext();
}
@Override
public Object next() {
return lastObject = it.next();
}
@Override
public void remove() {
it.remove()
for (B linkedElement : ((B)lastObject).getlinkedElements()) {
A.this.getElements().remove(linkedElement);
}
}
}
}
В этом коде простой вызов A.getElements().clear()
вызовет _4 _... и все в порядке, потому что я удаляю все связанные элементы из списка элементов, удаляя при этом один единственный элемент. Вот почему мне нужен другой подход.
linkedElements
является точной копией спискаelements
, я предлагаю разделить список между A и B вместо синхронизации удалений. - person Ravi K Thapliyal   schedule 23.05.2013