Package org.agrona.collections
Class Object2LongCounterMap<K>
- java.lang.Object
-
- org.agrona.collections.Object2LongCounterMap<K>
-
- Type Parameters:
K
- the type of keys malongained by this map.
public class Object2LongCounterMap<K> extends java.lang.Object
An open-addressing with linear probing hash map specialised for object and primitive counter pairs. A counter map views counters which hitinitialValue
as deleted. This means that changing a counter may impactsize()
.
-
-
Field Summary
Fields Modifier and Type Field Description private long
initialValue
private K[]
keys
private float
loadFactor
private static int
MIN_CAPACITY
private int
resizeThreshold
private int
size
private long[]
values
-
Constructor Summary
Constructors Constructor Description Object2LongCounterMap(int initialCapacity, float loadFactor, long initialValue)
Construct a new counter map with the initial value for the counter provided.Object2LongCounterMap(long initialValue)
Construct a new counter map with the initial value for the counter provided.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description long
addAndGet(K key, long amount)
Add amount to the current value associated with this key.int
capacity()
Get the total capacity for the map to which the load factor will be a fraction of.void
clear()
Clear out all entries.void
compact()
Compact the backing arrays by rehashing with a capacity just larger than current size and giving consideration to the load factor.private void
compactChain(int deleteIndex)
long
computeIfAbsent(K key, java.util.function.ToLongFunction<? super K> mappingFunction)
Tryget(Object)
a value for a key and if not present then apply mapping function.boolean
containsKey(K key)
Does the map contain a value for a given key which is notinitialValue()
.boolean
containsValue(long value)
Iterate over the values to see if any match the provided value.long
decrementAndGet(K key)
Convenience version ofaddAndGet(Object, long)
(key, -1).void
forEach(java.util.function.ObjLongConsumer<K> consumer)
Iterate over all value in the map which are not atinitialValue()
.long
get(K key)
Get the value of a counter associated with a key orinitialValue()
if not found.long
getAndAdd(K key, long amount)
Add amount to the current value associated with this key.long
getAndDecrement(K key)
Convenience version ofgetAndAdd(Object, long)
(key, -1).long
getAndIncrement(K key)
Convenience version ofgetAndAdd(Object, long)
(key, 1).private void
increaseCapacity()
long
incrementAndGet(K key)
Convenience version ofaddAndGet(Object, long)
(key, 1).long
initialValue()
The value to be used as a null marker in the map.boolean
isEmpty()
Is the map empty.float
loadFactor()
Get the load factor applied for resize operations.long
maxValue()
Get the maximum value stored in the map.long
minValue()
Get the minimum value stored in the map.long
put(K key, long value)
Put the value for a key in the map.private void
rehash(int newCapacity)
long
remove(K key)
Remove a counter value for a given key.int
resizeThreshold()
Get the actual threshold which when reached the map will resize.int
size()
The current size of the map which at not atinitialValue()
.java.lang.String
toString()
-
-
-
Field Detail
-
MIN_CAPACITY
private static final int MIN_CAPACITY
- See Also:
- Constant Field Values
-
loadFactor
private final float loadFactor
-
initialValue
private final long initialValue
-
resizeThreshold
private int resizeThreshold
-
size
private int size
-
keys
private K[] keys
-
values
private long[] values
-
-
Constructor Detail
-
Object2LongCounterMap
public Object2LongCounterMap(long initialValue)
Construct a new counter map with the initial value for the counter provided.- Parameters:
initialValue
- to be used for each counter.
-
Object2LongCounterMap
public Object2LongCounterMap(int initialCapacity, float loadFactor, long initialValue)
Construct a new counter map with the initial value for the counter provided.- Parameters:
initialCapacity
- of the map.loadFactor
- applied for resize operations.initialValue
- to be used for each counter.
-
-
Method Detail
-
initialValue
public long initialValue()
The value to be used as a null marker in the map.- Returns:
- value to be used as a null marker in the map.
-
loadFactor
public float loadFactor()
Get the load factor applied for resize operations.- Returns:
- the load factor applied for resize operations.
-
resizeThreshold
public int resizeThreshold()
Get the actual threshold which when reached the map will resize. This is a function of the current capacity and load factor.- Returns:
- the threshold when the map will resize.
-
capacity
public int capacity()
Get the total capacity for the map to which the load factor will be a fraction of.- Returns:
- the total capacity for the map.
-
size
public int size()
The current size of the map which at not atinitialValue()
.- Returns:
- map size, counters at
initialValue()
are not counted.
-
isEmpty
public boolean isEmpty()
Is the map empty.- Returns:
- size == 0
-
get
public long get(K key)
Get the value of a counter associated with a key orinitialValue()
if not found.- Parameters:
key
- lookup key.- Returns:
- counter value associated with key or
initialValue()
if not found.
-
put
public long put(K key, long value)
Put the value for a key in the map.- Parameters:
key
- lookup key.value
- new value, must not be initialValue.- Returns:
- current counter value associated with key, or
initialValue()
if none found. - Throws:
java.lang.IllegalArgumentException
- if value isinitialValue()
.
-
incrementAndGet
public long incrementAndGet(K key)
Convenience version ofaddAndGet(Object, long)
(key, 1).- Parameters:
key
- for the counter.- Returns:
- the new value.
-
decrementAndGet
public long decrementAndGet(K key)
Convenience version ofaddAndGet(Object, long)
(key, -1).- Parameters:
key
- for the counter.- Returns:
- the new value.
-
addAndGet
public long addAndGet(K key, long amount)
Add amount to the current value associated with this key. If no such value exists useinitialValue()
as current value and associate key withinitialValue()
+ amount unless amount is 0, in which case map remains unchanged.- Parameters:
key
- new or existing.amount
- to be added.- Returns:
- the new value associated with the specified key, or
initialValue()
+ amount if there was no mapping for the key.
-
getAndIncrement
public long getAndIncrement(K key)
Convenience version ofgetAndAdd(Object, long)
(key, 1).- Parameters:
key
- for the counter.- Returns:
- the old value.
-
getAndDecrement
public long getAndDecrement(K key)
Convenience version ofgetAndAdd(Object, long)
(key, -1).- Parameters:
key
- for the counter.- Returns:
- the old value.
-
getAndAdd
public long getAndAdd(K key, long amount)
Add amount to the current value associated with this key. If no such value exists useinitialValue()
as current value and associate key withinitialValue()
+ amount unless amount is 0, in which case map remains unchanged.- Parameters:
key
- new or existing.amount
- to be added.- Returns:
- the previous value associated with the specified key, or
initialValue()
if there was no mapping for the key.
-
forEach
public void forEach(java.util.function.ObjLongConsumer<K> consumer)
Iterate over all value in the map which are not atinitialValue()
.- Parameters:
consumer
- called for each key/value pair in the map.
-
containsKey
public boolean containsKey(K key)
Does the map contain a value for a given key which is notinitialValue()
.- Parameters:
key
- the key to check.- Returns:
- true if the map contains the key with a value other than
initialValue()
, false otherwise.
-
containsValue
public boolean containsValue(long value)
Iterate over the values to see if any match the provided value.If value provided is
initialValue()
then it will always return false.- Parameters:
value
- the key to check.- Returns:
- true if the map contains value as a mapped value, false otherwise.
-
clear
public void clear()
Clear out all entries.
-
compact
public void compact()
Compact the backing arrays by rehashing with a capacity just larger than current size and giving consideration to the load factor.
-
computeIfAbsent
public long computeIfAbsent(K key, java.util.function.ToLongFunction<? super K> mappingFunction)
Tryget(Object)
a value for a key and if not present then apply mapping function.- Parameters:
key
- to search on.mappingFunction
- to provide a value if the get returns null.- Returns:
- the value if found otherwise the missing value.
-
remove
public long remove(K key)
Remove a counter value for a given key.- Parameters:
key
- to be removed.- Returns:
- old value for key.
-
minValue
public long minValue()
Get the minimum value stored in the map. If the map is empty then it will returninitialValue()
- Returns:
- the minimum value stored in the map.
-
maxValue
public long maxValue()
Get the maximum value stored in the map. If the map is empty then it will returninitialValue()
- Returns:
- the maximum value stored in the map.
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
compactChain
private void compactChain(int deleteIndex)
-
increaseCapacity
private void increaseCapacity()
-
rehash
private void rehash(int newCapacity)
-
-