question: public synchronized void init ( ) { ArrayList < Warrant > tempList = new ArrayList < Warrant > ( ) ; List < String > systemNameList = _manager . getSystemNameList ( ) ; Iterator < String > iter = systemNameList . iterator ( ) ; while ( iter . hasNext ( ) ) { Warrant w = _manager . getBySystemName ( iter . next ( ) ) ; if ( ! _warList . contains ( w ) ) { w . addPropertyChangeListener ( this ) ; } else { _warList . remove ( w ) ; } tempList . add ( w ) ; } for ( int i = 0 ; i < _warList . size ( ) ; i ++ ) { Warrant w = _warList . get ( i ) ; if ( ! _warNX . contains ( w ) ) { w . removePropertyChangeListener ( this ) ; } } for ( int i = 0 ; i < _warNX . size ( ) ; i ++ ) { tempList . add ( _warNX . get ( i ) ) ; } _warList = tempList ; }
target:  Preserve current listeners so that there is no gap to miss a propertyChange