public class ObjectMap<K,V> extends Object implements Iterable<ObjectMap.Entry<K,V>>
This class performs fast contains and remove (typically O(1), worst case O(n) but that is rare in practice). Add may be slightly slower, depending on hash collisions. Hashcodes are rehashed to reduce collisions and the need to resize. Load factors greater than 0.91 greatly increase the chances to resize to the next higher POT size.
Unordered sets and maps are not designed to provide especially fast iteration. Iteration is faster with OrderedSet and OrderedMap.
This implementation uses linear probing with the backward shift algorithm for removal. Hashcodes are rehashed using Fibonacci hashing, instead of the more common power-of-two mask, to better distribute poor hashCodes (see Malte Skarupke's blog post). Linear probing continues to work even when all hashCodes collide, just more slowly.
Modifier and Type | Class and Description |
---|---|
static class |
ObjectMap.Entries<K,V> |
static class |
ObjectMap.Entry<K,V> |
static class |
ObjectMap.Keys<K> |
static class |
ObjectMap.Values<V> |
Modifier and Type | Field and Description |
---|---|
int |
size |
Constructor and Description |
---|
ObjectMap()
Creates a new map with an initial capacity of 51 and a load factor of 0.8.
|
ObjectMap(int initialCapacity)
Creates a new map with a load factor of 0.8.
|
ObjectMap(int initialCapacity,
float loadFactor)
Creates a new map with the specified initial capacity and load factor.
|
ObjectMap(ObjectMap<? extends K,? extends V> map)
Creates a new map identical to the specified map.
|
Modifier and Type | Method and Description |
---|---|
void |
clear() |
void |
clear(int maximumCapacity)
Clears the map and reduces the size of the backing arrays to be the specified capacity / loadFactor, if they are larger.
|
boolean |
containsKey(K key) |
boolean |
containsValue(Object value,
boolean identity)
Returns true if the specified value is in the map.
|
void |
ensureCapacity(int additionalCapacity)
Increases the size of the backing array to accommodate the specified number of additional items / loadFactor.
|
ObjectMap.Entries<K,V> |
entries()
Returns an iterator for the entries in the map.
|
boolean |
equals(Object obj) |
boolean |
equalsIdentity(Object obj)
Uses == for comparison of each value.
|
K |
findKey(Object value,
boolean identity)
Returns the key for the specified value, or null if it is not in the map.
|
V |
get(K key,
V defaultValue)
Returns the value for the specified key, or the default value if the key is not in the map.
|
<T extends K> |
get(T key)
Returns the value for the specified key, or null if the key is not in the map.
|
int |
hashCode() |
boolean |
isEmpty()
Returns true if the map is empty.
|
ObjectMap.Entries<K,V> |
iterator() |
ObjectMap.Keys<K> |
keys()
Returns an iterator for the keys in the map.
|
boolean |
notEmpty()
Returns true if the map has one or more items.
|
V |
put(K key,
V value)
Returns the old value associated with the specified key, or null.
|
void |
putAll(ObjectMap<? extends K,? extends V> map) |
V |
remove(K key)
Returns the value for the removed key, or null if the key is not in the map.
|
void |
shrink(int maximumCapacity)
Reduces the size of the backing arrays to be the specified capacity / loadFactor, or less.
|
String |
toString() |
String |
toString(String separator) |
ObjectMap.Values<V> |
values()
Returns an iterator for the values in the map.
|
forEach, spliterator
public ObjectMap()
public ObjectMap(int initialCapacity)
initialCapacity
- If not a power of two, it is increased to the next nearest power of two.public ObjectMap(int initialCapacity, float loadFactor)
initialCapacity
- If not a power of two, it is increased to the next nearest power of two.@Null public V put(K key, @Null V value)
@Null public <T extends K> V get(T key)
public V get(K key, @Null V defaultValue)
@Null public V remove(K key)
public boolean notEmpty()
public boolean isEmpty()
public void shrink(int maximumCapacity)
public void clear(int maximumCapacity)
public void clear()
public boolean containsValue(@Null Object value, boolean identity)
identity
- If true, uses == to compare the specified value with values in the map. If false, uses
equals(Object)
.public boolean containsKey(K key)
@Null public K findKey(@Null Object value, boolean identity)
identity
- If true, uses == to compare the specified value with values in the map. If false, uses
equals(Object)
.public void ensureCapacity(int additionalCapacity)
public boolean equalsIdentity(@Null Object obj)
public ObjectMap.Entries<K,V> iterator()
iterator
in interface Iterable<ObjectMap.Entry<K,V>>
public ObjectMap.Entries<K,V> entries()
If Collections.allocateIterators
is false, the same iterator instance is returned each time this method is called.
Use the ObjectMap.Entries
constructor for nested or multithreaded iteration.
public ObjectMap.Values<V> values()
If Collections.allocateIterators
is false, the same iterator instance is returned each time this method is called.
Use the ObjectMap.Values
constructor for nested or multithreaded iteration.
public ObjectMap.Keys<K> keys()
If Collections.allocateIterators
is false, the same iterator instance is returned each time this method is called.
Use the ObjectMap.Keys
constructor for nested or multithreaded iteration.
Copyright © 2020. All rights reserved.