Package io.netty.util.collection
Class LongObjectHashMap<V>
- java.lang.Object
-
- io.netty.util.collection.LongObjectHashMap<V>
-
- Type Parameters:
V- The value type stored in the map.
- All Implemented Interfaces:
LongObjectMap<V>,java.util.Map<java.lang.Long,V>
public class LongObjectHashMap<V> extends java.lang.Object implements LongObjectMap<V>
A hash map implementation ofLongObjectMapthat uses open addressing for keys. To minimize the memory footprint, this class uses open addressing rather than chaining. Collisions are resolved using linear probing. Deletions implement compaction, so cost of remove can approach O(N) for full maps, which makes a small loadFactor recommended.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private classLongObjectHashMap.EntrySetSet implementation for iterating over the entries of the map.private classLongObjectHashMap.KeySetSet implementation for iterating over the keys.(package private) classLongObjectHashMap.MapEntryA single entry in the map.private classLongObjectHashMap.MapIteratorIterator used by theMapinterface.private classLongObjectHashMap.PrimitiveIteratorIterator over primitive entries.-
Nested classes/interfaces inherited from interface io.netty.util.collection.LongObjectMap
LongObjectMap.PrimitiveEntry<V>
-
-
Field Summary
Fields Modifier and Type Field Description static intDEFAULT_CAPACITYDefault initial capacity.static floatDEFAULT_LOAD_FACTORDefault load factor.private java.lang.Iterable<LongObjectMap.PrimitiveEntry<V>>entriesprivate java.util.Set<java.util.Map.Entry<java.lang.Long,V>>entrySetprivate long[]keysprivate java.util.Set<java.lang.Long>keySetprivate floatloadFactorThe load factor for the map.private intmaskprivate intmaxSizeThe maximum number of elements allowed without allocating more space.private static java.lang.ObjectNULL_VALUEPlaceholder for null values, so we can use the actual null to mean available.private intsizeprivate V[]values
-
Constructor Summary
Constructors Constructor Description LongObjectHashMap()LongObjectHashMap(int initialCapacity)LongObjectHashMap(int initialCapacity, float loadFactor)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private intcalcMaxSize(int capacity)Calculates the maximum size allowed before rehashing.voidclear()booleancontainsKey(long key)Indicates whether or not this map contains a value for the specified key.booleancontainsKey(java.lang.Object key)booleancontainsValue(java.lang.Object value)java.lang.Iterable<LongObjectMap.PrimitiveEntry<V>>entries()Gets an iterable to traverse over the primitive entries contained in this map.java.util.Set<java.util.Map.Entry<java.lang.Long,V>>entrySet()booleanequals(java.lang.Object obj)Vget(long key)Gets the value in the map with the specified key.Vget(java.lang.Object key)private voidgrowSize()Grows the map size after an insertion.inthashCode()private static inthashCode(long key)Returns the hash code for the key.private inthashIndex(long key)Returns the hashed index for the given key.private intindexOf(long key)Locates the index for the given key.booleanisEmpty()java.util.Set<java.lang.Long>keySet()protected java.lang.StringkeyToString(long key)Helper method called bytoString()in order to convert a single map key into a string.private longobjectToKey(java.lang.Object key)private intprobeNext(int index)Get the next sequential index afterindexand wraps if necessary.Vput(long key, V value)Puts the given entry into the map.Vput(java.lang.Long key, V value)voidputAll(java.util.Map<? extends java.lang.Long,? extends V> sourceMap)private voidrehash(int newCapacity)Rehashes the map for the given capacity.Vremove(long key)Removes the entry with the specified key.Vremove(java.lang.Object key)private booleanremoveAt(int index)Removes entry at the given index position.intsize()private static <T> TtoExternal(T value)private static <T> TtoInternal(T value)java.lang.StringtoString()java.util.Collection<V>values()
-
-
-
Field Detail
-
DEFAULT_CAPACITY
public static final int DEFAULT_CAPACITY
Default initial capacity. Used if not specified in the constructor- See Also:
- Constant Field Values
-
DEFAULT_LOAD_FACTOR
public static final float DEFAULT_LOAD_FACTOR
Default load factor. Used if not specified in the constructor- See Also:
- Constant Field Values
-
NULL_VALUE
private static final java.lang.Object NULL_VALUE
Placeholder for null values, so we can use the actual null to mean available. (Better than using a placeholder for available: less references for GC processing.)
-
maxSize
private int maxSize
The maximum number of elements allowed without allocating more space.
-
loadFactor
private final float loadFactor
The load factor for the map. Used to calculatemaxSize.
-
keys
private long[] keys
-
values
private V[] values
-
size
private int size
-
mask
private int mask
-
keySet
private final java.util.Set<java.lang.Long> keySet
-
entrySet
private final java.util.Set<java.util.Map.Entry<java.lang.Long,V>> entrySet
-
entries
private final java.lang.Iterable<LongObjectMap.PrimitiveEntry<V>> entries
-
-
Method Detail
-
toExternal
private static <T> T toExternal(T value)
-
toInternal
private static <T> T toInternal(T value)
-
get
public V get(long key)
Description copied from interface:LongObjectMapGets the value in the map with the specified key.- Specified by:
getin interfaceLongObjectMap<V>- Parameters:
key- the key whose associated value is to be returned.- Returns:
- the value or
nullif the key was not found in the map.
-
put
public V put(long key, V value)
Description copied from interface:LongObjectMapPuts the given entry into the map.- Specified by:
putin interfaceLongObjectMap<V>- Parameters:
key- the key of the entry.value- the value of the entry.- Returns:
- the previous value for this key or
nullif there was no previous mapping.
-
putAll
public void putAll(java.util.Map<? extends java.lang.Long,? extends V> sourceMap)
- Specified by:
putAllin interfacejava.util.Map<java.lang.Long,V>
-
remove
public V remove(long key)
Description copied from interface:LongObjectMapRemoves the entry with the specified key.- Specified by:
removein interfaceLongObjectMap<V>- Parameters:
key- the key for the entry to be removed from this map.- Returns:
- the previous value for the key, or
nullif there was no mapping.
-
size
public int size()
- Specified by:
sizein interfacejava.util.Map<java.lang.Long,V>
-
isEmpty
public boolean isEmpty()
- Specified by:
isEmptyin interfacejava.util.Map<java.lang.Long,V>
-
clear
public void clear()
- Specified by:
clearin interfacejava.util.Map<java.lang.Long,V>
-
containsKey
public boolean containsKey(long key)
Description copied from interface:LongObjectMapIndicates whether or not this map contains a value for the specified key.- Specified by:
containsKeyin interfaceLongObjectMap<V>
-
containsValue
public boolean containsValue(java.lang.Object value)
- Specified by:
containsValuein interfacejava.util.Map<java.lang.Long,V>
-
entries
public java.lang.Iterable<LongObjectMap.PrimitiveEntry<V>> entries()
Description copied from interface:LongObjectMapGets an iterable to traverse over the primitive entries contained in this map. As an optimization, theLongObjectMap.PrimitiveEntrys returned by theIteratormay change as theIteratorprogresses. The caller should not rely onLongObjectMap.PrimitiveEntrykey/value stability.- Specified by:
entriesin interfaceLongObjectMap<V>
-
values
public java.util.Collection<V> values()
- Specified by:
valuesin interfacejava.util.Map<java.lang.Long,V>
-
hashCode
public int hashCode()
- Specified by:
hashCodein interfacejava.util.Map<java.lang.Long,V>- Overrides:
hashCodein classjava.lang.Object
-
equals
public boolean equals(java.lang.Object obj)
- Specified by:
equalsin interfacejava.util.Map<java.lang.Long,V>- Overrides:
equalsin classjava.lang.Object
-
containsKey
public boolean containsKey(java.lang.Object key)
- Specified by:
containsKeyin interfacejava.util.Map<java.lang.Long,V>
-
get
public V get(java.lang.Object key)
- Specified by:
getin interfacejava.util.Map<java.lang.Long,V>
-
put
public V put(java.lang.Long key, V value)
- Specified by:
putin interfacejava.util.Map<java.lang.Long,V>
-
remove
public V remove(java.lang.Object key)
- Specified by:
removein interfacejava.util.Map<java.lang.Long,V>
-
keySet
public java.util.Set<java.lang.Long> keySet()
- Specified by:
keySetin interfacejava.util.Map<java.lang.Long,V>
-
entrySet
public java.util.Set<java.util.Map.Entry<java.lang.Long,V>> entrySet()
- Specified by:
entrySetin interfacejava.util.Map<java.lang.Long,V>
-
objectToKey
private long objectToKey(java.lang.Object key)
-
indexOf
private int indexOf(long key)
Locates the index for the given key. This method probes using double hashing.- Parameters:
key- the key for an entry in the map.- Returns:
- the index where the key was found, or
-1if no entry is found for that key.
-
hashIndex
private int hashIndex(long key)
Returns the hashed index for the given key.
-
hashCode
private static int hashCode(long key)
Returns the hash code for the key.
-
probeNext
private int probeNext(int index)
Get the next sequential index afterindexand wraps if necessary.
-
growSize
private void growSize()
Grows the map size after an insertion. If necessary, performs a rehash of the map.
-
removeAt
private boolean removeAt(int index)
Removes entry at the given index position. Also performs opportunistic, incremental rehashing if necessary to not break conflict chains.- Parameters:
index- the index position of the element to remove.- Returns:
trueif the next item was moved back.falseotherwise.
-
calcMaxSize
private int calcMaxSize(int capacity)
Calculates the maximum size allowed before rehashing.
-
rehash
private void rehash(int newCapacity)
Rehashes the map for the given capacity.- Parameters:
newCapacity- the new capacity for the map.
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
keyToString
protected java.lang.String keyToString(long key)
Helper method called bytoString()in order to convert a single map key into a string. This is protected to allow subclasses to override the appearance of a given key.
-
-