public boolean containsKey(int key) { int hash = key % capacity; IntToIntHashMapEntry e, tmp; for (tmp = null, e = data[hash]; e != null; tmp = e, e = e.next) { if (e.key == key) { /* Assume that it is likely that * an eventual call to get() for the same * key is near */ if (tmp != null) { tmp.next = e.next; e.next = data[hash]; data[hash] = e; } return true; } } return false; }
private void rehash(int newCapacity) { if (newCapacity > capacity) { IntToIntHashMapEntry newData[]; IntToIntHashMapEntry entry, tmp; int newHash; newData = new IntToIntHashMapEntry[newCapacity]; for (int i = 0; i < capacity; i++) { for (entry = data[i]; entry != null; ) { tmp = entry.next; newHash = entry.key % newCapacity; entry.next = newData[newHash]; newData[newHash] = entry; entry = tmp; } } data = newData; capacity = newCapacity; cutoff = (int) (newCapacity * loadFactor); } }
public int remove(int key) { int hash = key % capacity; IntToIntHashMapEntry e, tmp; for (tmp = null, e = data[hash]; e != null; tmp = e, e = e.next) { if (e.key == key) { if (tmp == null) { data[hash] = e.next; } else { tmp.next = e.next; } int i = e.value; /* e.next = entryPool; entryPool = e; */ e = null; size--; return i; } } return defaultValue; }