@Override public boolean containsKey(Object aKey) { assert aKey != null; int index = indexForKey(aKey); if (index >= 0) { return keyValues[index] != null; } return false; }
@Override public V get(Object aKey) { assert aKey != null; int index = indexForKey(aKey); if (index >= 0) { @SuppressWarnings("unchecked") V val = (V) keyValues[index+1]; return val; } return null; }
@Override public V remove(Object aKey) { assert aKey != null; int index = indexForKey(aKey); if (index >= 0) { if (keyValues[index] != null) { size--; keyValues[index] = null; @SuppressWarnings("unchecked") V prev = (V) keyValues[index + 1]; keyValues[index + 1] = null; return prev; } } return null; }
@Override public V put(K aKey, V aValue) { assert aKey != null; int index = indexForKey(aKey); if (index >= 0) { Object key = keyValues[index]; if (key == null) { assert (size+1)*2 <= keyValues.length; size++; keyValues[index] = aKey; assert keyValues[index+1] == null; } @SuppressWarnings("unchecked") V prev = (V) keyValues[index+1]; keyValues[index+1] = aValue; return prev; } assert size*2 == keyValues.length : "trying to put " + size + " in " + keyValues.length; assert false : "this map can not contain more than " + size; return null; }