@SuppressWarnings("unchecked") private V getMapped(final Object key) { Objects.requireNonNull(key); final Object[] entries = this.entries; final int mask = entries.length - 1; int index = Hashing.evenHash(key.hashCode(), mask); Object value = null; while (entries[index + 1] != null) { if (entries[index] == key || entries[index].equals(key)) { value = entries[index + 1]; break; } index = next(index, mask); } return (V)value; }
@SuppressWarnings("FinalParameters") private void compactChain(int deleteKeyIndex) { final Object[] entries = this.entries; final int mask = entries.length - 1; int keyIndex = deleteKeyIndex; while (true) { keyIndex = next(keyIndex, mask); if (entries[keyIndex + 1] == null) { break; } final int hash = Hashing.evenHash(entries[keyIndex].hashCode(), mask); if ((keyIndex < hash && (hash <= deleteKeyIndex || deleteKeyIndex <= keyIndex)) || (hash <= deleteKeyIndex && deleteKeyIndex <= keyIndex)) { entries[deleteKeyIndex] = entries[keyIndex]; entries[deleteKeyIndex + 1] = entries[keyIndex + 1]; entries[keyIndex] = null; entries[keyIndex + 1] = null; deleteKeyIndex = keyIndex; } } }
private void rehash(final int newCapacity) { final Object[] oldEntries = entries; final int length = entries.length; capacity(newCapacity); final Object[] newEntries = entries; final int mask = entries.length - 1; for (int keyIndex = 0; keyIndex < length; keyIndex += 2) { final Object value = oldEntries[keyIndex + 1]; if (value != null) { final Object key = oldEntries[keyIndex]; int index = Hashing.evenHash(key.hashCode(), mask); while (newEntries[index + 1] != null) { index = next(index, mask); } newEntries[index] = key; newEntries[index + 1] = value; } } }
/** * {@inheritDoc} */ public V remove(final Object key) { final Object[] entries = this.entries; final int mask = entries.length - 1; int keyIndex = Hashing.evenHash(key.hashCode(), mask); Object oldValue = null; while (entries[keyIndex + 1] != null) { if (entries[keyIndex] == key || entries[keyIndex].equals(key)) { oldValue = entries[keyIndex + 1]; entries[keyIndex] = null; entries[keyIndex + 1] = null; size--; compactChain(keyIndex); break; } keyIndex = next(keyIndex, mask); } return unmapNullValue(oldValue); }
index = next(index, mask);
@SuppressWarnings("unchecked") private V getMapped(final Object key) { Objects.requireNonNull(key); final Object[] entries = this.entries; final int mask = entries.length - 1; int index = Hashing.evenHash(key.hashCode(), mask); Object value = null; while (entries[index + 1] != null) { if (entries[index] == key || entries[index].equals(key)) { value = entries[index + 1]; break; } index = next(index, mask); } return (V)value; }
@SuppressWarnings("FinalParameters") private void compactChain(int deleteKeyIndex) { final Object[] entries = this.entries; final int mask = entries.length - 1; int keyIndex = deleteKeyIndex; while (true) { keyIndex = next(keyIndex, mask); if (entries[keyIndex + 1] == null) { break; } final int hash = Hashing.evenHash(entries[keyIndex].hashCode(), mask); if ((keyIndex < hash && (hash <= deleteKeyIndex || deleteKeyIndex <= keyIndex)) || (hash <= deleteKeyIndex && deleteKeyIndex <= keyIndex)) { entries[deleteKeyIndex] = entries[keyIndex]; entries[deleteKeyIndex + 1] = entries[keyIndex + 1]; entries[keyIndex] = null; entries[keyIndex + 1] = null; deleteKeyIndex = keyIndex; } } }
private void rehash(final int newCapacity) { final Object[] oldEntries = entries; final int length = entries.length; capacity(newCapacity); final Object[] newEntries = entries; final int mask = entries.length - 1; for (int keyIndex = 0; keyIndex < length; keyIndex += 2) { final Object value = oldEntries[keyIndex + 1]; if (value != null) { final Object key = oldEntries[keyIndex]; int index = Hashing.evenHash(key.hashCode(), mask); while (newEntries[index + 1] != null) { index = next(index, mask); } newEntries[index] = key; newEntries[index + 1] = value; } } }
/** * {@inheritDoc} */ public V remove(final Object key) { final Object[] entries = this.entries; final int mask = entries.length - 1; int keyIndex = Hashing.evenHash(key.hashCode(), mask); Object oldValue = null; while (entries[keyIndex + 1] != null) { if (entries[keyIndex] == key || entries[keyIndex].equals(key)) { oldValue = entries[keyIndex + 1]; entries[keyIndex] = null; entries[keyIndex + 1] = null; size--; compactChain(keyIndex); break; } keyIndex = next(keyIndex, mask); } return unmapNullValue(oldValue); }
index = next(index, mask);