Class KeyInValueMap<K,V>

java.lang.Object
org.openjdk.jmc.common.collection.KeyInValueMap<K,V>
Type Parameters:
K - key type
V - value type
All Implemented Interfaces:
Iterable<V>
Direct Known Subclasses:
EntryHashMap

public abstract class KeyInValueMap<K,V> extends Object implements 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.

  • Constructor Summary

    Constructors
    Constructor
    Description
    KeyInValueMap(int initialCapacity, float loadFactor)
    Create a new map.
  • Method Summary

    Modifier and Type
    Method
    Description
    protected abstract V
    This method must be overridden in subclasses so that values can be computed for missing keys.
    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.
    protected abstract K
    getKey(V value)
    Get the key for a value.
    protected int
    hashKey(K key)
    Calculate the hash for a key.
     
    int
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface java.lang.Iterable

    forEach, spliterator
  • Constructor Details

    • KeyInValueMap

      public KeyInValueMap(int initialCapacity, float loadFactor)
      Create a new map.
      Parameters:
      initialCapacity - initial storage capacity
      loadFactor - load factor at which to increase the internal storage capacity
  • Method Details

    • 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 with computeValue(Object) which must be implemented by subclasses.
      Parameters:
      key - key
      computeIfAbsent - If a value is not found and this is set to true, then compute and add a new value using computeValue(Object).
      Returns:
      The value for the key. If computeIfAbsent is false and no matching value exists, then null is returned.
    • size

      public int size()
    • iterator

      public Iterator<V> iterator()
      Specified by:
      iterator in interface Iterable<K>
    • computeValue

      protected abstract V computeValue(K key)
      This method must be overridden in subclasses so that values can be computed for missing keys. Called by get(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
    • getKey

      protected abstract K getKey(V value)
      Get the key for a value.
      Parameters:
      value - value to get key for
      Returns:
      key for value