HashBiMap
Date: 2016-05-24

com.google.common.collect

## Class HashBiMap<K,V>

- java.lang.Object
- - java.util.AbstractMap<K,V>
  - - com.google.common.collect.HashBiMap<K,V>

- All Implemented Interfaces:
    BiMap<K,V>, java.io.Serializable, java.util.Map<K,V>

      @GwtCompatible(emulated=true)
      public final class HashBiMap<K,V>
      extends java.util.AbstractMap<K,V>
      implements BiMap<K,V>, java.io.Serializable

  A `BiMap` backed by two hash tables. This implementation allows null keys and values. A `HashBiMap` and its inverse are both serializable.

  See the Guava User Guide article on `BiMap` .

  Since:
    2.0
  See Also:
    Serialized Form

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class java.util.AbstractMap

      `java.util.AbstractMap.SimpleEntry<K,V>, java.util.AbstractMap.SimpleImmutableEntry<K,V>`

    - ### Nested classes/interfaces inherited from interface java.util.Map

      `java.util.Map.Entry<K,V>`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `clear()`
    `boolean` | `containsKey(java.lang.Object key)`
    `boolean` | `containsValue(java.lang.Object value)`
    `static <K,V> HashBiMap<K,V>` | `create()` Returns a new, empty `HashBiMap` with the default initial capacity (16).
    `static <K,V> HashBiMap<K,V>` | `create(int expectedSize)` Constructs a new, empty bimap with the specified expected size.
    `static <K,V> HashBiMap<K,V>` | `create(java.util.Map<? extends K,? extends V> map)` Constructs a new bimap containing initial values from `map`.
    `java.util.Set<java.util.Map.Entry<K,V>>` | `entrySet()`
    `V` | `forcePut(K key, V value)` An alternate form of `put` that silently removes any existing entry with the value `value` before proceeding with the `BiMap.put(K, V)` operation.
    `V` | `get(java.lang.Object key)`
    `BiMap<V,K>` | `inverse()` Returns the inverse view of this bimap, which maps each of this bimap's values to its associated key.
    `java.util.Set<K>` | `keySet()`
    `V` | `put(K key, V value)`
    `V` | `remove(java.lang.Object key)`
    `int` | `size()`
    `java.util.Set<V>` | `values()`

    - ### Methods inherited from class java.util.AbstractMap

      `clone, equals, hashCode, isEmpty, putAll, toString`

    - ### Methods inherited from class java.lang.Object

      `finalize, getClass, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface com.google.common.collect.BiMap

      `putAll`

    - ### Methods inherited from interface java.util.Map

      `entrySet, equals, hashCode, isEmpty`

- - ### Method Detail

    - #### create

          public static <K,V> HashBiMap<K,V> create()

      Returns a new, empty `HashBiMap` with the default initial capacity (16).

    - #### create

          public static <K,V> HashBiMap<K,V> create(int expectedSize)

      Constructs a new, empty bimap with the specified expected size.
      Parameters:
        `expectedSize` - the expected number of entries
      Throws:
        `java.lang.IllegalArgumentException` - if the specified expected size is negative

    - #### create

          public static <K,V> HashBiMap<K,V> create(java.util.Map<? extends K,? extends V> map)

      Constructs a new bimap containing initial values from `map`. The bimap is created with an initial capacity sufficient to hold the mappings in the specified map.

    - #### containsKey

          public boolean containsKey(@Nullable
                            java.lang.Object key)

      Specified by:
        `containsKey` in interface `java.util.Map<K,V>`
      Overrides:
        `containsKey` in class `java.util.AbstractMap<K,V>`

    - #### containsValue

          public boolean containsValue(@Nullable
                              java.lang.Object value)

      Specified by:
        `containsValue` in interface `java.util.Map<K,V>`
      Overrides:
        `containsValue` in class `java.util.AbstractMap<K,V>`

    - #### get

          @Nullable
          public V get(@Nullable
                       java.lang.Object key)

      Specified by:
        `get` in interface `java.util.Map<K,V>`
      Overrides:
        `get` in class `java.util.AbstractMap<K,V>`

    - #### put

          public V put(@Nullable
              K key,
              @Nullable
              V value)

      Description copied from interface: `BiMap`
      Specified by:
        `put` in interface `BiMap<K,V>`
      Specified by:
        `put` in interface `java.util.Map<K,V>`
      Overrides:
        `put` in class `java.util.AbstractMap<K,V>`

    - #### forcePut

          public V forcePut(@Nullable
                   K key,
                   @Nullable
                   V value)

      Description copied from interface: `BiMap`
      An alternate form of `put` that silently removes any existing entry with the value `value` before proceeding with the `BiMap.put(K, V)` operation. If the bimap previously contained the provided key-value mapping, this method has no effect.

      Note that a successful call to this method could cause the size of the bimap to increase by one, stay the same, or even decrease by one.

      Warning: If an existing entry with this value is removed, the key for that entry is discarded and not returned.

      Specified by:
        `forcePut` in interface `BiMap<K,V>`
      Parameters:
        `key` - the key with which the specified value is to be associated
        `value` - the value to be associated with the specified key
      Returns:
        the value which was previously associated with the key, which may be `null`, or `null` if there was no previous entry

    - #### remove

          public V remove(@Nullable
                 java.lang.Object key)

      Specified by:
        `remove` in interface `java.util.Map<K,V>`
      Overrides:
        `remove` in class `java.util.AbstractMap<K,V>`

    - #### clear

          public void clear()

      Specified by:
        `clear` in interface `java.util.Map<K,V>`

    - #### size

          public int size()

      Specified by:
        `size` in interface `java.util.Map<K,V>`

    - #### keySet

          public java.util.Set<K> keySet()

      Specified by:
        `keySet` in interface `java.util.Map<K,V>`
      Overrides:
        `keySet` in class `java.util.AbstractMap<K,V>`

    - #### values

          public java.util.Set<V> values()

      Description copied from interface: `BiMap`

      Because a bimap has unique values, this method returns a `Set`, instead of the `Collection` specified in the `Map` interface.

      Specified by:
        `values` in interface `BiMap<K,V>`
      Specified by:
        `values` in interface `java.util.Map<K,V>`
      Overrides:
        `values` in class `java.util.AbstractMap<K,V>`

    - #### inverse

          public BiMap<V,K> inverse()

      Description copied from interface: `BiMap`
      Returns the inverse view of this bimap, which maps each of this bimap's values to its associated key. The two bimaps are backed by the same data; any changes to one will appear in the other.

      Note:There is no guaranteed correspondence between the iteration order of a bimap and that of its inverse.

      Specified by:
        `inverse` in interface `BiMap<K,V>`
      Returns:
        the inverse view of this bimap

    - #### entrySet

          public java.util.Set<java.util.Map.Entry<K,V>> entrySet()

      Specified by:
        `entrySet` in interface `java.util.Map<K,V>`
      Specified by:
        `entrySet` in class `java.util.AbstractMap<K,V>`