Class KeyInValueMap<K,V>
- java.lang.Object
-
- org.openjdk.jmc.common.collection.KeyInValueMap<K,V>
-
- Type Parameters:
K- key typeV- value type
- All Implemented Interfaces:
java.lang.Iterable<V>
- Direct Known Subclasses:
EntryHashMap
public abstract class KeyInValueMap<K,V> extends java.lang.Object implements java.lang.Iterable<V>A map for values that has the key inside the value, so only storing the value directly without a wrapping map entry is sufficient. It can also compute absent values which is not available in Java 7 maps.Does not support null keys or values. Not thread safe.
-
-
Field Summary
Fields Modifier and Type Field Description private intcapacityprivate floatloadFactorprivate intsizeprivate intthresholdprivate java.lang.Object[]values
-
Constructor Summary
Constructors Constructor Description KeyInValueMap(int initialCapacity, float loadFactor)Create a new map.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract VcomputeValue(K key)This method must be overridden in subclasses so that values can be computed for missing keys.private voidcreateTable(int newCapacity)Vget(K key, boolean computeIfAbsent)Get the value for a key and optionally compute a new value if it is not already present in the map.private intgetIndex(int hash)protected abstract KgetKey(V value)Get the key for a value.private VgetValue(int index)private inthashFromValue(V value)protected inthashKey(K key)Calculate the hash for a key.private booleanisKeyFor(K key, V value)This method must be overridden in subclasses so that values can be checked if they match a given key.java.util.Iterator<V>iterator()private voidrehash()intsize()
-
-
-
Method Detail
-
get
public V get(K key, boolean computeIfAbsent)
Get the value for a key and optionally compute a new value if it is not already present in the map. Automatic value computation is done withcomputeValue(Object)which must be implemented by subclasses.- Parameters:
key- keycomputeIfAbsent- If a value is not found and this is set totrue, then compute and add a new value usingcomputeValue(Object).- Returns:
- The value for the key. If computeIfAbsent is
falseand no matching value exists, thennullis returned.
-
size
public int size()
-
iterator
public java.util.Iterator<V> iterator()
- Specified by:
iteratorin interfacejava.lang.Iterable<K>
-
createTable
private void createTable(int newCapacity)
-
getValue
private V getValue(int index)
-
rehash
private void rehash()
-
getIndex
private int getIndex(int hash)
-
isKeyFor
private boolean isKeyFor(K key, V value)
This method must be overridden in subclasses so that values can be checked if they match a given key. Called byget(Object, boolean)when there are multiple values that share the same key hash.- Parameters:
key- key to checkvalue- value to check- Returns:
trueifkeyis the key forvalue,falseotherwise
-
computeValue
protected abstract V computeValue(K key)
This method must be overridden in subclasses so that values can be computed for missing keys. Called byget(Object, boolean)when the requested key is missing in the map.- Parameters:
key- key to calculate value for- Returns:
- calculated value
-
hashKey
protected int hashKey(K key)
Calculate the hash for a key. May be overridden by subclasses.- Parameters:
key- key to calculate hash for- Returns:
- hash for key
-
hashFromValue
private int hashFromValue(V value)
-
-