public synchronized boolean remove(Node obj){
  ArrayList<Node> newList=new ArrayList<Node>(this.list);
  boolean ret=newList.remove(obj);
  if (ret) {
    this.list=Collections.unmodifiableList(newList);
    incrementVersion();
  }
  return ret;
}

public synchronized boolean remove ( Node obj ) { ArrayList < Node > newList = new ArrayList < Node > ( this . list ) ; boolean ret = newList . remove ( obj ) ; if ( ret ) { this . list = Collections . unmodifiableList ( newList ) ; incrementVersion ( ) ; } return ret ; }
removes obj from the list . removal is done by making a copy of the existing list and then removing the obj from the new list . if the object was removed , the list is assigning to the new unmodifiable list . this is to ensure that the iterator of the list doesn ' t get concurrentmodificationexception .
