/** * Inserts a value into the set. * * @param obj an <code>Object</code> value * @return true if the set was modified by the add operation */ public boolean add( E obj ) { int index = insertionIndex( obj ); if ( index < 0 ) { return false; // already present in set, nothing to add } Object old = _set[index]; _set[index] = obj; postInsertHook( old == FREE ); return true; // yes, we added something }
/** * Expands the set to accommodate new values. * * @param newCapacity an <code>int</code> value */ @SuppressWarnings({"unchecked"}) protected void rehash( int newCapacity ) { int oldCapacity = _set.length; Object oldSet[] = _set; _set = new Object[newCapacity]; Arrays.fill( _set, FREE ); for ( int i = oldCapacity; i-- > 0; ) { if ( oldSet[i] != FREE && oldSet[i] != REMOVED ) { E o = (E) oldSet[i]; int index = insertionIndex( o ); if ( index < 0 ) { // everyone pays for this because some people can't RTFM throwObjectContractViolation( _set[( -index - 1 )], o ); } _set[index] = o; } } }