Package org.agrona.collections
Class Int2IntCounterMap
java.lang.Object
org.agrona.collections.Int2IntCounterMap
An open-addressing with linear probing hash map specialised for primitive key and counter pairs. A counter map views
counters which hit
initialValue
as deleted. This means that changing a counter may impact size()
.-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate int[]
private final int
private final float
private static final int
private int
private int
-
Constructor Summary
ConstructorsConstructorDescriptionInt2IntCounterMap
(int initialValue) Construct a new counter map with the initial value for the counter provided.Int2IntCounterMap
(int initialCapacity, float loadFactor, int initialValue) Construct a new counter map with the initial value for the counter provided. -
Method Summary
Modifier and TypeMethodDescriptionint
addAndGet
(int key, int 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.private void
capacity
(int newCapacity) 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 deleteKeyIndex) int
computeIfAbsent
(int key, IntUnaryOperator mappingFunction) Tryget(int)
a value for a key and if not present then apply mapping function.boolean
containsKey
(int key) Does the map contain a value for a given key which is notinitialValue()
.boolean
containsValue
(int value) Iterate over the values to see if any match the provided value.int
decrementAndGet
(int key) Convenience version ofaddAndGet(int, int)
(key, -1).void
forEach
(IntIntConsumer consumer) Iterate over all value in the map which are not atinitialValue()
.int
get
(int key) Get the value of a counter associated with a key orinitialValue()
if not found.int
getAndAdd
(int key, int amount) Add amount to the current value associated with this key.int
getAndDecrement
(int key) Convenience version ofgetAndAdd(int, int)
(key, -1).int
getAndIncrement
(int key) Convenience version ofgetAndAdd(int, int)
(key, 1).private void
int
incrementAndGet
(int key) Convenience version ofaddAndGet(int, int)
(key, 1).int
The value to be used as a null marker in the map.boolean
isEmpty()
Is the map empty.float
Get the load factor applied for resize operations.int
maxValue()
Get the maximum value stored in the map.int
minValue()
Get the minimum value stored in the map.private static int
next
(int index, int mask) int
put
(int key, int value) Put the value for a key in the map.private void
rehash
(int newCapacity) int
remove
(int key) Remove a counter value for a given key.int
Get the actual threshold which when reached the map will resize.int
size()
The current size of the map which at not atinitialValue()
.toString()
-
Field Details
-
MIN_CAPACITY
private static final int MIN_CAPACITY- See Also:
-
loadFactor
private final float loadFactor -
initialValue
private final int initialValue -
resizeThreshold
private int resizeThreshold -
size
private int size -
entries
private int[] entries
-
-
Constructor Details
-
Int2IntCounterMap
public Int2IntCounterMap(int initialValue) Construct a new counter map with the initial value for the counter provided.- Parameters:
initialValue
- to be used for each counter.
-
Int2IntCounterMap
public Int2IntCounterMap(int initialCapacity, float loadFactor, int 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 Details
-
initialValue
public int 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 int get(int key) Get the value of a counter associated with a key orinitialValue()
if not found.- Parameters:
key
- to lookup.- Returns:
- counter value associated with key or
initialValue()
if not found.
-
put
public int put(int key, int 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:
IllegalArgumentException
- if value isinitialValue()
.
-
incrementAndGet
public int incrementAndGet(int key) Convenience version ofaddAndGet(int, int)
(key, 1).- Parameters:
key
- for the counter.- Returns:
- the new value.
-
decrementAndGet
public int decrementAndGet(int key) Convenience version ofaddAndGet(int, int)
(key, -1).- Parameters:
key
- for the counter.- Returns:
- the new value.
-
addAndGet
public int addAndGet(int key, int 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 existingamount
- to be added- Returns:
- the new value associated with the key, or
initialValue()
+ amount if no mapping for key.
-
getAndIncrement
public int getAndIncrement(int key) Convenience version ofgetAndAdd(int, int)
(key, 1).- Parameters:
key
- for the counter.- Returns:
- the old value.
-
getAndDecrement
public int getAndDecrement(int key) Convenience version ofgetAndAdd(int, int)
(key, -1).- Parameters:
key
- for the counter.- Returns:
- the old value.
-
getAndAdd
public int getAndAdd(int key, int 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 key, or
initialValue()
if no mapping for key.
-
forEach
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(int 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(int 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
Tryget(int)
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 int remove(int key) Remove a counter value for a given key.- Parameters:
key
- to be removed- Returns:
- old value for key
-
minValue
public int 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 int 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
-
next
private static int next(int index, int mask) -
compactChain
private void compactChain(int deleteKeyIndex) -
capacity
private void capacity(int newCapacity) -
increaseCapacity
private void increaseCapacity() -
rehash
private void rehash(int newCapacity)
-