@Override public boolean containsKey(@Nullable Object key) { return seekByKey(key, smearedHash(key)) != null; }
@Override public @Nullable V get(@Nullable Object key) { return Maps.valueOrNull(seekByKey(key, smearedHash(key))); }
@Override public boolean containsKey(@NullableDecl Object key) { return seekByKey(key, smearedHash(key)) != null; }
@Override public void remove() { if (modCount != expectedModCount) { throw new ConcurrentModificationException(); } checkRemove(toRemove != null); delete(toRemove); expectedModCount = modCount; toRemove = null; }
@NullableDecl @Override public V get(@NullableDecl Object key) { return Maps.valueOrNull(seekByKey(key, smearedHash(key))); }
@Override public void remove() { if (modCount != expectedModCount) { throw new ConcurrentModificationException(); } checkRemove(toRemove != null); delete(toRemove); expectedModCount = modCount; toRemove = null; }
private V put(@Nullable K key, @Nullable V value, boolean force) { int keyHash = smearedHash(key); int valueHash = smearedHash(value); BiEntry<K, V> oldEntryForKey = seekByKey(key, keyHash); if (oldEntryForKey != null && valueHash == oldEntryForKey.valueHash && Objects.equal(value, oldEntryForKey.value)) { return value; } BiEntry<K, V> oldEntryForValue = seekByValue(value, valueHash); if (oldEntryForValue != null) { if (force) { delete(oldEntryForValue); } else { throw new IllegalArgumentException("value already present: " + value); } } BiEntry<K, V> newEntry = new BiEntry<>(key, keyHash, value, valueHash); if (oldEntryForKey != null) { delete(oldEntryForKey); insert(newEntry, oldEntryForKey); oldEntryForKey.prevInKeyInsertionOrder = null; oldEntryForKey.nextInKeyInsertionOrder = null; return oldEntryForKey.value; } else { insert(newEntry, null); rehashIfNecessary(); return null; } }
BiEntry<K, V> oldEntryForKey = seekByKey(key, keyHash); if (oldEntryForValue != null && keyHash == oldEntryForValue.keyHash
private V put(@NullableDecl K key, @NullableDecl V value, boolean force) { int keyHash = smearedHash(key); int valueHash = smearedHash(value); BiEntry<K, V> oldEntryForKey = seekByKey(key, keyHash); if (oldEntryForKey != null && valueHash == oldEntryForKey.valueHash && Objects.equal(value, oldEntryForKey.value)) { return value; } BiEntry<K, V> oldEntryForValue = seekByValue(value, valueHash); if (oldEntryForValue != null) { if (force) { delete(oldEntryForValue); } else { throw new IllegalArgumentException("value already present: " + value); } } BiEntry<K, V> newEntry = new BiEntry<>(key, keyHash, value, valueHash); if (oldEntryForKey != null) { delete(oldEntryForKey); insert(newEntry, oldEntryForKey); oldEntryForKey.prevInKeyInsertionOrder = null; oldEntryForKey.nextInKeyInsertionOrder = null; return oldEntryForKey.value; } else { insert(newEntry, null); rehashIfNecessary(); return null; } }
BiEntry<K, V> oldEntryForKey = seekByKey(key, keyHash); if (oldEntryForValue != null && keyHash == oldEntryForValue.keyHash
@Nullable @Override public V get(@Nullable Object key) { BiEntry<K, V> entry = seekByKey(key, hash(key)); return (entry == null) ? null : entry.value; }
@Nullable @Override public V get(@Nullable Object key) { BiEntry<K, V> entry = seekByKey(key, hash(key)); return (entry == null) ? null : entry.value; }
@Nullable @Override public V get(@Nullable Object key) { BiEntry<K, V> entry = seekByKey(key, hash(key)); return (entry == null) ? null : entry.value; }
@Nullable @Override public V get(@Nullable Object key) { BiEntry<K, V> entry = seekByKey(key, hash(key)); return (entry == null) ? null : entry.value; }
@Override public void remove() { checkForConcurrentModification(); checkState(toRemove != null, "Only one remove() call allowed per call to next"); delete(toRemove); expectedModCount = modCount; toRemove = null; }
@Override public void remove() { checkForConcurrentModification(); checkRemove(toRemove != null); delete(toRemove); expectedModCount = modCount; toRemove = null; }
@Override public void remove() { checkForConcurrentModification(); checkRemove(toRemove != null); delete(toRemove); expectedModCount = modCount; toRemove = null; }
@Override public void remove() { checkForConcurrentModification(); checkRemove(toRemove != null); delete(toRemove); expectedModCount = modCount; toRemove = null; }
@Override public void remove() { if (modCount != expectedModCount) { throw new ConcurrentModificationException(); } checkRemove(toRemove != null); delete(toRemove); expectedModCount = modCount; toRemove = null; }
@NullableDecl @Override public V get(@NullableDecl Object key) { return Maps.valueOrNull(seekByKey(key, smearedHash(key))); }