Class HashMultimap<K,V>

All Implemented Interfaces:
Multimap<K,V>, SetMultimap<K,V>, Serializable

public final class HashMultimap<K,V> extends HashMultimapGwtSerializationDependencies<K,V>
Implementation of Multimap using hash tables.

The multimap does not store duplicate key-value pairs. Adding a new key-value pair equal to an existing key-value pair has no effect.

Keys and values may be null. All optional multimap methods are supported, and all returned views are modifiable.

This class is not threadsafe when any concurrent operations update the multimap. Concurrent read operations will work correctly if the last write happens-before any reads. To allow concurrent update operations, wrap your multimap with a call to Multimaps.synchronizedSetMultimap(com.google.common.collect.SetMultimap<K, V>).

Warning: Do not modify either a key or a value of a HashMultimap in a way that affects its Object.equals(java.lang.Object) behavior. Undefined behavior and bugs will result.

Since:
2.0
See Also:
  • Field Details

    • DEFAULT_VALUES_PER_KEY

      private static final int DEFAULT_VALUES_PER_KEY
      See Also:
    • expectedValuesPerKey

      transient int expectedValuesPerKey
    • serialVersionUID

      private static final long serialVersionUID
      See Also:
  • Constructor Details

    • HashMultimap

      private HashMultimap()
    • HashMultimap

      private HashMultimap(int expectedKeys, int expectedValuesPerKey)
    • HashMultimap

      private HashMultimap(Multimap<? extends K,? extends V> multimap)
  • Method Details

    • create

      public static <K, V> HashMultimap<K,V> create()
      Creates a new, empty HashMultimap with the default initial capacities.

      You may also consider the equivalent MultimapBuilder.hashKeys().hashSetValues().build(), which provides more control over the underlying data structure.

    • create

      public static <K, V> HashMultimap<K,V> create(int expectedKeys, int expectedValuesPerKey)
      Constructs an empty HashMultimap with enough capacity to hold the specified numbers of keys and values without rehashing.

      You may also consider the equivalent MultimapBuilder.hashKeys(expectedKeys).hashSetValues(expectedValuesPerKey).build(), which provides more control over the underlying data structure.

      Parameters:
      expectedKeys - the expected number of distinct keys
      expectedValuesPerKey - the expected average number of values per key
      Throws:
      IllegalArgumentException - if expectedKeys or expectedValuesPerKey is negative
    • create

      public static <K, V> HashMultimap<K,V> create(Multimap<? extends K,? extends V> multimap)
      Constructs a HashMultimap with the same mappings as the specified multimap. If a key-value mapping appears multiple times in the input multimap, it only appears once in the constructed multimap.

      You may also consider the equivalent MultimapBuilder.hashKeys().hashSetValues().build(multimap), which provides more control over the underlying data structure.

      Parameters:
      multimap - the multimap whose contents are copied to this multimap
    • createCollection

      Set<V> createCollection()
      Creates the collection of values for a single key.

      Collections with weak, soft, or phantom references are not supported. Each call to createCollection should create a new instance.

      The returned collection class determines whether duplicate key-value pairs are allowed.

      Creates an empty HashSet for a collection of values for one key.

      Specified by:
      createCollection in class AbstractSetMultimap<K,V>
      Returns:
      a new HashSet containing a collection of values for one key
    • writeObject

      private void writeObject(ObjectOutputStream stream) throws IOException
      Throws:
      IOException
    • readObject

      private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException
      Throws:
      IOException
      ClassNotFoundException