Skip to content

Data Structures

Agrona offers a number of efficient zero and/or minimal allocation collection objects for java primitives that avoid boxing. They typically out perform their JDK counterparts.

Info

Agrona 1.17.0 added a number of non-boxing operations to Agrona Collections, for example Int2IntHashMap now offers putIfAbsent(final int key, final int value).

Hash Maps

Warning

Agrona HashMaps may sometimes misbehave when viewed through Java IDE debuggers. To prevent this, set the shouldAvoidAllocation constructor argument to false. This prevents Agrona from caching iterators and map entries and results in increased garbage.

Collection Notes
Int2IntHashMap Primitive int to int HashMap
Int2NullableObjectHashMap Primitive int to a nullable object HashMap. If null, NullReference is used as a placeholder internally. Externally, if a value is written as null, it will be read as null.
Int2ObjectHashMap Primitive int to object HashMap.
Long2LongHashMap Primitive long to long HashMap
Long2NullableObjectHashMap Primitive long to a nullable object HashMap. If null, NullReference is used as a placeholder internally. Externally, if a value is written as null, it will be read as null.
Long2ObjectHashMap Primitive long to object HashMap.
Object2IntHashMap Object to primitive int HashMap
Object2NullableObjectHashMap Object to a nullable object HashMap
Object2ObjectHashMap Object to object HashMap.

Warning

With all Agrona HashMap objects, make certain that the hashCode() implementation is implemented as required. If you have an Aeron Cluster, use the Agrona HashMaps and don't have a deterministic hashCode() operation, then the cluster nodes may diverge. In addition to this, performance can be severely impacted if there are a high number of collisions in the hashCodes of objects being stored.

Caches

Collection Notes
Int2ObjectCache Cache with primitive int lookup to an object. Tuned for very small data structures stored within CPU cache lines. Typical sizes are 2 to 16 entries. Underlying storage is an array.
IntLruCache Fixed size cache which evicts the least used entry when running out of space.

HashSets

Collection Notes
IntHashSet HashSet for primitive integers. Once expanded, operations are allocation free.
ObjectHashSet HashSet for objects. Once expanded, operations are allocation free.

Others

Collection Notes
IntArrayList An array list to hold primitive integers without boxing
IntArrayQueue An array queue to hold primitive integers without boxing
BiInt2ObjectMap A map that takes in a two part integer key and associates it with an object