public class EquivalentHashMap<K,V> extends AbstractMap<K,V>
Equivalence
function implementations for keys
and values, as opposed to relying on their own equals/hashCode/toString
implementations. This is handy when using key/values whose mentioned
methods cannot be overriden, i.e. arrays, and in situations where users
want to avoid using wrapper objects.
This hash map implementation is optimised for store/retrieval rather
than iteration. Internal node entries are not linked, so responsibility to
link them falls on the iterators.HashMap
Modifier and Type | Class and Description |
---|---|
private class |
EquivalentHashMap.EntryIterator |
class |
EquivalentHashMap.EntrySet |
private class |
EquivalentHashMap.EquivalentHashMapIterator<E> |
private class |
EquivalentHashMap.KeyIterator |
private class |
EquivalentHashMap.KeySet |
(package private) static class |
EquivalentHashMap.MapEntry<K,V>
Exported Entry for iterators
|
protected static class |
EquivalentHashMap.Node<K,V> |
private class |
EquivalentHashMap.ValueIterator |
class |
EquivalentHashMap.Values |
AbstractMap.SimpleEntry<K,V>
Modifier and Type | Field and Description |
---|---|
private static int |
DEFAULT_INITIAL_CAPACITY |
private static float |
DEFAULT_LOAD_FACTOR |
private Equivalence<K> |
keyEq |
private float |
loadFactor |
private static int |
MAXIMUM_CAPACITY |
(package private) int |
modCount |
(package private) int |
size |
private EquivalentHashMap.Node<K,V>[] |
table |
private int |
threshold |
private Equivalence<V> |
valueEq |
entrySet, keySet, values
Constructor and Description |
---|
EquivalentHashMap(Equivalence<K> keyEq,
Equivalence<V> valueEq) |
EquivalentHashMap(int initialCapacity,
Equivalence<K> keyEq,
Equivalence<V> valueEq) |
EquivalentHashMap(int initialCapacity,
float loadFactor,
Equivalence<K> keyEq,
Equivalence<V> valueEq) |
EquivalentHashMap(java.util.Map<? extends K,? extends V> map,
Equivalence<K> keyEq,
Equivalence<V> valueEq) |
Modifier and Type | Method and Description |
---|---|
(package private) void |
addEntry(int index,
K key,
V value,
int hash) |
void |
clear() |
boolean |
containsKey(java.lang.Object key) |
boolean |
containsValue(java.lang.Object value) |
(package private) EquivalentHashMap.Node<K,V> |
createNode(K key,
V value,
int hash,
EquivalentHashMap.Node<K,V> currentNode) |
java.util.Set<java.util.Map.Entry<K,V>> |
entrySet() |
boolean |
equals(java.lang.Object o) |
V |
get(java.lang.Object key) |
Equivalence<K> |
getKeyEquivalence() |
(package private) <T> T |
getNode(java.lang.Object key) |
Equivalence<V> |
getValueEquivalence() |
private static int |
index(int hashCode,
int length) |
private void |
init(int initialCapacity,
float loadFactor) |
boolean |
isEmpty() |
java.util.Set<K> |
keySet() |
(package private) java.util.Iterator<java.util.Map.Entry<K,V>> |
newEntryIterator() |
(package private) java.util.Iterator<K> |
newKeyIterator() |
(package private) java.util.Iterator<V> |
newValueIterator() |
V |
put(K key,
V value) |
void |
putAll(java.util.Map<? extends K,? extends V> map) |
V |
remove(java.lang.Object key) |
(package private) <T> T |
removeNode(java.lang.Object key) |
(package private) void |
resize(int newCapacity) |
int |
size() |
private static int |
spread(int hashCode) |
(package private) void |
transfer(EquivalentHashMap.Node<K,V>[] newTable) |
java.util.Collection<V> |
values() |
assertKeyNotNull, eq, hash, hashCode
private static final int DEFAULT_INITIAL_CAPACITY
private static final float DEFAULT_LOAD_FACTOR
private static final int MAXIMUM_CAPACITY
private EquivalentHashMap.Node<K,V>[] table
int size
private int threshold
private final float loadFactor
int modCount
private final Equivalence<K> keyEq
private final Equivalence<V> valueEq
public EquivalentHashMap(Equivalence<K> keyEq, Equivalence<V> valueEq)
public EquivalentHashMap(int initialCapacity, Equivalence<K> keyEq, Equivalence<V> valueEq)
public EquivalentHashMap(int initialCapacity, float loadFactor, Equivalence<K> keyEq, Equivalence<V> valueEq)
public EquivalentHashMap(java.util.Map<? extends K,? extends V> map, Equivalence<K> keyEq, Equivalence<V> valueEq)
private void init(int initialCapacity, float loadFactor)
public int size()
public boolean isEmpty()
public boolean containsKey(java.lang.Object key)
public boolean containsValue(java.lang.Object value)
public V get(java.lang.Object key)
<T> T getNode(java.lang.Object key)
EquivalentHashMap.Node<K,V> createNode(K key, V value, int hash, EquivalentHashMap.Node<K,V> currentNode)
void resize(int newCapacity)
void transfer(EquivalentHashMap.Node<K,V>[] newTable)
public V remove(java.lang.Object key)
<T> T removeNode(java.lang.Object key)
public void clear()
public boolean equals(java.lang.Object o)
public Equivalence<K> getKeyEquivalence()
public Equivalence<V> getValueEquivalence()
public java.util.Set<K> keySet()
java.util.Iterator<K> newKeyIterator()
java.util.Iterator<V> newValueIterator()
public java.util.Collection<V> values()
private static int spread(int hashCode)
private static int index(int hashCode, int length)