public ConcurrentIntObjectHashMap(final int initialCapacity, final float loadFactor) { final int capacity = computeInitialCapacity(initialCapacity, loadFactor); setTable(new IntHashEntry<?>[capacity]); _loadFactor = loadFactor; }
@Override public boolean contains(final int key) { return _map.contains(key); }
@Override public V get(final int key) { if (count != 0) { // read-volatile IntHashEntry<V> entry = getFirst(key); while (entry != null) { if (entry.key == key) { final V value = entry.value; return value != null ? value : readValueUnderLock(entry); } entry = entry.next; } } return null; }
@Override public boolean replace(final int key, @NotNull final V oldValue, @NotNull final V newValue) { VerifyArgument.notNull(oldValue, "oldValue"); VerifyArgument.notNull(newValue, "newValue"); lock(); try { IntHashEntry<V> entry = getFirst(key); while (entry != null && entry.key != key) { entry = entry.next; } if (entry != null && oldValue.equals(entry.value)) { entry.value = newValue; return true; } return false; } finally { unlock(); } }
@Override public V putIfAbsent(final int key, @NotNull final V value) { processQueue(); final IntReference<V> newReference = createReference(key, value, _queue); while (true) { final IntReference<V> oldReference = _map.putIfAbsent(key, newReference); if (oldReference == null) { return null; } final V oldValue = oldReference.get(); if (oldValue != null) { return oldValue; } final boolean replaced = _map.replace(key, oldReference, newReference); if (replaced) { return null; } } }
@Override public V put(final int key, @NotNull final V value) { return put(key, value, false); }
@Override public V get(final int key) { final IntReference<V> reference = _map.get(key); return reference != null ? reference.get() : null; }
@NotNull @Override public int[] keys() { return _map.keys(); }
@NotNull @Override public V addOrGet(final int key, @NotNull final V value) { final V previous = putIfAbsent(key, value); return previous != null ? previous : value; }
@Override public void clear() { _map.clear(); processQueue(); }
@Override public boolean contains(final int key) { if (count != 0) { // read-volatile IntHashEntry<V> entry = getFirst(key); while (entry != null) { if (entry.key == key) { return true; } entry = entry.next; } } return false; }
@Override public boolean isEmpty() { return _map.isEmpty(); }
@Override public boolean replace(final int key, @NotNull final V oldValue, @NotNull final V newValue) { VerifyArgument.notNull(oldValue, "oldValue"); VerifyArgument.notNull(newValue, "newValue"); lock(); try { IntHashEntry<V> entry = getFirst(key); while (entry != null && entry.key != key) { entry = entry.next; } if (entry != null && oldValue.equals(entry.value)) { entry.value = newValue; return true; } return false; } finally { unlock(); } }
@Override public V putIfAbsent(final int key, @NotNull final V value) { processQueue(); final IntReference<V> newReference = createReference(key, value, _queue); while (true) { final IntReference<V> oldReference = _map.putIfAbsent(key, newReference); if (oldReference == null) { return null; } final V oldValue = oldReference.get(); if (oldValue != null) { return oldValue; } final boolean replaced = _map.replace(key, oldReference, newReference); if (replaced) { return null; } } }
@Override public V put(final int key, @NotNull final V value) { return put(key, value, false); }
@Override public V get(final int key) { final IntReference<V> reference = _map.get(key); return reference != null ? reference.get() : null; }