There are various reasons to not expose the Enum on this class API; the primary is that in some of the cases in which we need the pattern, there is the need to hold an additional couple of values beyond the ones modelled by the Enum, essentially having some extra keys in the map; this could be modelled by defining a new Enum but that's also not ideal.
Another reason is that the goal of this class is to allow the host to save memory, as we typically need to keep references to many of these objects for a long time; being able to refer purely to an array is less practical but gets us benefits in memory layout and total retained memory.
| Modifier and Type | Field and Description |
|---|---|
| private static final Object | |
| private volatile Object[] |
| Access | Constructor and Description |
|---|---|
| protected |
| Modifier and Type | Method and Description |
|---|---|
| protected <K1 extends K> V | Returns: the associated value to this index/key.storage index in the array index, final K1 the original key object, used to efficiently pass it into the valueGenerator function originalKey, final Function<K1, V> if no value was generated before for this index, then the valueGenerator is invoked to
associate a new value and store it into the internal array at the provided index. valueGenerator)Both the index and the original key are requested for efficiency reasons. |
| private synchronized <K1 extends K> V |
| NOT_INITIALIZED | back to summary |
|---|---|
| private static final Object NOT_INITIALIZED | |
| values | back to summary |
|---|---|
| private volatile Object[] values | |
| LazyIndexedMap | back to summary |
|---|---|
| protected LazyIndexedMap(final int size) | |
| computeIfAbsent | back to summary |
|---|---|
| protected <K1 extends K> V computeIfAbsent(final int index, final K1 originalKey, final Function<K1, V> valueGenerator) Both the index and the original key are requested for efficiency reasons. It is the responsibility of the caller to ensure there is a 1:1 matching relation between them.
| |
| lockedComputeIfAbsent | back to summary |
|---|---|
| private synchronized <K1 extends K> V lockedComputeIfAbsent(final int index, final K1 originalKey, final Function<K1, V> valueGenerator) | |