public class CompactLabelToOrdinal extends LabelToOrdinal
Since the HashArrays don't handle collisions, a
CollisionMap is used
to store the colliding labels.
This data structure grows by adding a new HashArray whenever the number of
collisions in the
LabelToOrdinal.getMaxOrdinal(). Growing also includes reinserting all colliding
labels into the HashArrays to possibly reduce the number of collisions.
For setting the
CompactLabelToOrdinal(int, float, int).
This data structure has a much lower memory footprint (~30%) compared to a Java HashMap<String, Integer>. It also only uses a small fraction of objects a HashMap would use, thus limiting the GC overhead. Ingestion speed was also ~50% faster compared to a HashMap for 3M unique labels.
|Modifier and Type||Field and Description|
|Constructor and Description|
|Modifier and Type||Method and Description|
Adds a new label if its not yet in the table.
public static final float DefaultLoadFactor
public CompactLabelToOrdinal(int initialCapacity, float loadFactor, int numHashArrays)
public int sizeOfMap()
public void addLabel(CategoryPath label, int ordinal)
IllegalArgumentExceptionif the same label with a different ordinal was previoulsy added to this table.
Copyright © 2000-2013 Apache Software Foundation. All Rights Reserved.