public T get(int key) { return key == 0 ? value0 : values[find(key)]; }
public void put(int key, T value) { if (value == null) { throw new NullPointerException(); } if (key == 0) { if (value0 == null) ++count; value0 = value; return; } sortedKeys = null; int index = find(key); if (values[index] == null) count++; keyList[index] = key; values[index] = value; if (count > highWaterMark) rehash(); }
private void rehash() { T[] oldValues = values; int[] oldkeyList = keyList; int newPrimeIndex = primeIndex; if (count > highWaterMark) { ++newPrimeIndex; } else if (count < lowWaterMark) { newPrimeIndex -= 2; } initialize(newPrimeIndex); for (int i = oldkeyList.length - 1; i >= 0; --i) { T value = oldValues[i]; if (value != null) { int key = oldkeyList[i]; int index = find(key); keyList[index] = key; values[index] = value; ++count; } } }
public Object remove(int key) { Object retval = null; if (key == 0) { if (value0 != null) { retval = value0; value0 = null; --count; } } else { final int index = find(key); if (values[index] != null) { retval = values[index]; sortedKeys = null; values[index] = null; --count; if (count < lowWaterMark) { rehash(); } } } return retval; }