com.google.common.collect

## Class EnumHashBiMap<K extends java.lang.Enum<K>,V>

- java.lang.Object
- - com.google.common.collect.ForwardingObject
  - - com.google.common.collect.ForwardingMap<K,V>
    - - com.google.common.collect.EnumHashBiMap<K,V>

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

      @GwtCompatible(emulated=true)
      public final class EnumHashBiMap<K extends java.lang.Enum<K>,V>
      extends ForwardingMap<K,V>

  A `BiMap` backed by an `EnumMap` instance for keys-to-values, and a `HashMap` instance for values-to-keys. Null keys are not permitted, but null values are. An `EnumHashBiMap` 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 com.google.common.collect.ForwardingMap

      `ForwardingMap.StandardEntrySet, ForwardingMap.StandardKeySet, ForwardingMap.StandardValues`

    - ### 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` | `containsValue(java.lang.Object value)`
    `static <K extends java.lang.Enum<K>,V> EnumHashBiMap<K,V>` | `create(java.lang.Class<K> keyType)` Returns a new, empty `EnumHashBiMap` using the specified key type.
    `static <K extends java.lang.Enum<K>,V> EnumHashBiMap<K,V>` | `create(java.util.Map<K,? extends V> map)` Constructs a new bimap with the same mappings as the specified map.
    `protected java.util.Map<K,V>` | `delegate()` Returns the backing delegate instance that methods are forwarded to.
    `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.
    `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()`
    `java.lang.Class<K>` | `keyType()` Returns the associated key type.
    `V` | `put(K key, V value)`
    `void` | `putAll(java.util.Map<? extends K,? extends V> map)`
    `V` | `remove(java.lang.Object key)`
    `java.util.Set<V>` | `values()`

    - ### Methods inherited from class com.google.common.collect.ForwardingMap

      `containsKey, equals, get, hashCode, isEmpty, size, standardClear, standardContainsKey, standardContainsValue, standardEquals, standardHashCode, standardIsEmpty, standardPutAll, standardRemove, standardToString`

    - ### Methods inherited from class com.google.common.collect.ForwardingObject

      `toString`

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

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

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

      `containsKey, equals, get, hashCode, isEmpty, size`

- - ### Method Detail

    - #### create

          public static <K extends java.lang.Enum<K>,V> EnumHashBiMap<K,V> create(java.lang.Class<K> keyType)

      Returns a new, empty `EnumHashBiMap` using the specified key type.
      Parameters:
        `keyType` - the key type

    - #### create

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

      Constructs a new bimap with the same mappings as the specified map. If the specified map is an `EnumHashBiMap` or an `EnumBiMap`, the new bimap has the same key type as the input bimap. Otherwise, the specified map must contain at least one mapping, in order to determine the key type.
      Parameters:
        `map` - the map whose mappings are to be placed in this map
      Throws:
        `java.lang.IllegalArgumentException` - if map is not an `EnumBiMap` or an `EnumHashBiMap` instance and contains no mappings

    - #### put

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

      Description copied from interface: `BiMap`
      Specified by:
        `put` in interface `BiMap<K extends java.lang.Enum<K>,V>`
      Specified by:
        `put` in interface `java.util.Map<K extends java.lang.Enum<K>,V>`

    - #### forcePut

          public V forcePut(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 extends java.lang.Enum<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

    - #### keyType

          public java.lang.Class<K> keyType()

      Returns the associated key type.

    - #### delegate

          protected java.util.Map<K,V> delegate()

      Description copied from class: `ForwardingObject`
      Returns the backing delegate instance that methods are forwarded to. Abstract subclasses generally override this method with an abstract method that has a more specific return type, such as `ForwardingSet.delegate()`. Concrete subclasses override this method to supply the instance being decorated.
      Specified by:
        `delegate` in class `ForwardingMap<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 `ForwardingMap<K,V>`

    - #### remove

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

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

    - #### putAll

          public void putAll(java.util.Map<? extends K,? extends V> map)

      Description copied from interface: `BiMap`

      Warning: the results of calling this method may vary depending on the iteration order of `map`.

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

    - #### clear

          public void clear()

      Specified by:
        `clear` in interface `java.util.Map<K,V>`
      Overrides:
        `clear` in class `ForwardingMap<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

    - #### keySet

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

      Specified by:
        `keySet` in interface `java.util.Map<K,V>`
      Overrides:
        `keySet` in class `ForwardingMap<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 `ForwardingMap<K,V>`

    - #### entrySet

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

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