Package com.google.common.collect
Class HashBiMap<K,V>
- java.lang.Object
-
- java.util.AbstractMap<K,V>
-
- com.google.common.collect.Maps.IteratorBasedAbstractMap<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 Maps.IteratorBasedAbstractMap<K,V> implements BiMap<K,V>, java.io.Serializable
ABiMapbacked by two hash tables. This implementation allows null keys and values. AHashBiMapand its inverse are both serializable.This implementation guarantees insertion-based iteration order of its keys.
See the Guava User Guide article on
BiMap.- Since:
- 2.0
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classHashBiMap.BiEntry<K,V>private classHashBiMap.Inverseprivate static classHashBiMap.InverseSerializedForm<K,V>(package private) classHashBiMap.Itr<T>private classHashBiMap.KeySet
-
Field Summary
Fields Modifier and Type Field Description private HashBiMap.BiEntry<K,V>firstInKeyInsertionOrderprivate HashBiMap.BiEntry<K,V>[]hashTableKToVprivate HashBiMap.BiEntry<K,V>[]hashTableVToKprivate BiMap<V,K>inverseprivate HashBiMap.BiEntry<K,V>lastInKeyInsertionOrderprivate static doubleLOAD_FACTORprivate intmaskprivate intmodCountprivate static longserialVersionUIDprivate intsize
-
Constructor Summary
Constructors Modifier Constructor Description privateHashBiMap(int expectedSize)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclear()booleancontainsKey(java.lang.Object key)booleancontainsValue(java.lang.Object value)static <K,V>
HashBiMap<K,V>create()Returns a new, emptyHashBiMapwith 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 frommap.private HashBiMap.BiEntry<K,V>[]createTable(int length)private voiddelete(HashBiMap.BiEntry<K,V> entry)Finds and removesentryfrom the bucket linked lists in both the key-to-value direction and the value-to-key direction.(package private) java.util.Iterator<java.util.Map.Entry<K,V>>entryIterator()VforcePut(K key, V value)An alternate form ofputthat silently removes any existing entry with the valuevaluebefore proceeding with theBiMap.put(K, V)operation.voidforEach(java.util.function.BiConsumer<? super K,? super V> action)Vget(java.lang.Object key)private voidinit(int expectedSize)private voidinsert(HashBiMap.BiEntry<K,V> entry, HashBiMap.BiEntry<K,V> oldEntryForKey)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()Vput(K key, V value)private Vput(K key, V value, boolean force)private KputInverse(V value, K key, boolean force)private voidreadObject(java.io.ObjectInputStream stream)private voidrehashIfNecessary()Vremove(java.lang.Object key)voidreplaceAll(java.util.function.BiFunction<? super K,? super V,? extends V> function)private HashBiMap.BiEntry<K,V>seekByKey(java.lang.Object key, int keyHash)private HashBiMap.BiEntry<K,V>seekByValue(java.lang.Object value, int valueHash)intsize()java.util.Set<V>values()private voidwriteObject(java.io.ObjectOutputStream stream)-
Methods inherited from class com.google.common.collect.Maps.IteratorBasedAbstractMap
entrySet, entrySpliterator, forEachEntry
-
Methods inherited from class java.util.AbstractMap
clone, equals, hashCode, isEmpty, putAll, toString
-
-
-
-
Field Detail
-
LOAD_FACTOR
private static final double LOAD_FACTOR
- See Also:
- Constant Field Values
-
hashTableKToV
private transient HashBiMap.BiEntry<K,V>[] hashTableKToV
-
hashTableVToK
private transient HashBiMap.BiEntry<K,V>[] hashTableVToK
-
firstInKeyInsertionOrder
private transient HashBiMap.BiEntry<K,V> firstInKeyInsertionOrder
-
lastInKeyInsertionOrder
private transient HashBiMap.BiEntry<K,V> lastInKeyInsertionOrder
-
size
private transient int size
-
mask
private transient int mask
-
modCount
private transient int modCount
-
serialVersionUID
@GwtIncompatible private static final long serialVersionUID
- See Also:
- Constant Field Values
-
-
Method Detail
-
create
public static <K,V> HashBiMap<K,V> create()
Returns a new, emptyHashBiMapwith 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 frommap. The bimap is created with an initial capacity sufficient to hold the mappings in the specified map.
-
init
private void init(int expectedSize)
-
delete
private void delete(HashBiMap.BiEntry<K,V> entry)
Finds and removesentryfrom the bucket linked lists in both the key-to-value direction and the value-to-key direction.
-
insert
private void insert(HashBiMap.BiEntry<K,V> entry, HashBiMap.BiEntry<K,V> oldEntryForKey)
-
seekByKey
private HashBiMap.BiEntry<K,V> seekByKey(java.lang.Object key, int keyHash)
-
seekByValue
private HashBiMap.BiEntry<K,V> seekByValue(java.lang.Object value, int valueHash)
-
containsKey
public boolean containsKey(java.lang.Object key)
-
containsValue
public boolean containsValue(java.lang.Object value)
-
get
public V get(java.lang.Object key)
-
forcePut
public V forcePut(K key, V value)
Description copied from interface:BiMapAn alternate form ofputthat silently removes any existing entry with the valuevaluebefore proceeding with theBiMap.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:
forcePutin interfaceBiMap<K,V>- Parameters:
key- the key with which the specified value is to be associatedvalue- the value to be associated with the specified key- Returns:
- the value which was previously associated with the key, which may be
null, ornullif there was no previous entry
-
rehashIfNecessary
private void rehashIfNecessary()
-
createTable
private HashBiMap.BiEntry<K,V>[] createTable(int length)
-
remove
public V remove(java.lang.Object key)
-
clear
public void clear()
-
size
public int size()
-
keySet
public java.util.Set<K> keySet()
-
values
public java.util.Set<V> values()
Description copied from interface:BiMapBecause a bimap has unique values, this method returns a
Set, instead of theCollectionspecified in theMapinterface.
-
entryIterator
java.util.Iterator<java.util.Map.Entry<K,V>> entryIterator()
- Specified by:
entryIteratorin classMaps.IteratorBasedAbstractMap<K,V>
-
replaceAll
public void replaceAll(java.util.function.BiFunction<? super K,? super V,? extends V> function)
-
inverse
public BiMap<V,K> inverse()
Description copied from interface:BiMapReturns 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.
-
writeObject
@GwtIncompatible private void writeObject(java.io.ObjectOutputStream stream) throws java.io.IOException
- Throws:
java.io.IOException
-
readObject
@GwtIncompatible private void readObject(java.io.ObjectInputStream stream) throws java.io.IOException, java.lang.ClassNotFoundException
- Throws:
java.io.IOExceptionjava.lang.ClassNotFoundException
-
-