@Generated(date="2015-05-07T09:33:03+0200", value="KTypeVTypeHashMap.java") public class ObjectDoubleHashMap<KType> extends java.lang.Object implements ObjectDoubleMap<KType>, Preallocable, java.lang.Cloneable
Object
to double
, implemented using open
addressing with linear probing for collision resolution.
Note: read about important differences between hash and scatter sets.
ObjectDoubleScatterMap
,
HPPC interfaces diagramModifier and Type | Class and Description |
---|---|
class |
ObjectDoubleHashMap.KeysContainer
A view of the keys inside this hash map.
|
Modifier and Type | Field and Description |
---|---|
protected int |
assigned
The number of stored keys (assigned key slots), excluding the special
"empty" key, if any (use
size() instead). |
protected boolean |
hasEmptyKey
Special treatment for the "empty slot" key marker.
|
protected int |
keyMixer
We perturb hash values with a container-unique
seed to avoid problems with nearly-sorted-by-hash
values on iterations.
|
java.lang.Object[] |
keys
The array holding keys.
|
protected double |
loadFactor
The load factor for
keys . |
protected int |
mask
Mask for slot scans in
keys . |
protected HashOrderMixingStrategy |
orderMixer
Per-instance hash order mixing strategy.
|
protected int |
resizeAt
|
double[] |
values
The array holding values.
|
Constructor and Description |
---|
ObjectDoubleHashMap()
New instance with sane defaults.
|
ObjectDoubleHashMap(int expectedElements)
New instance with sane defaults.
|
ObjectDoubleHashMap(int expectedElements,
double loadFactor)
New instance with sane defaults.
|
ObjectDoubleHashMap(int expectedElements,
double loadFactor,
HashOrderMixingStrategy orderMixer)
New instance with the provided defaults.
|
ObjectDoubleHashMap(ObjectDoubleAssociativeContainer<? extends KType> container)
Create a hash map from all key-value pairs of another container.
|
Modifier and Type | Method and Description |
---|---|
double |
addTo(KType key,
double incrementValue)
Adds
incrementValue to any existing value for the given key
or inserts incrementValue if key did not previously exist. |
protected void |
allocateBuffers(int arraySize)
Allocate new internal buffers.
|
protected void |
allocateThenInsertThenRehash(int slot,
KType pendingKey,
double pendingValue)
This method is invoked when there is a new key/ value pair to be inserted into
the buffers but there is not enough empty slots to do so.
|
void |
clear()
Clear all keys and values in the container.
|
ObjectDoubleHashMap<KType> |
clone() |
boolean |
containsKey(KType key)
Returns
true if this container has an association to a value
for the given key. |
void |
ensureCapacity(int expectedElements)
Ensure this container can hold at least the
given number of keys (entries) without resizing its buffers.
|
protected boolean |
equalElements(ObjectDoubleHashMap<?> other)
Return true if all keys of some other container exist in this container.
|
boolean |
equals(java.lang.Object obj)
Compares the specified object with this set for equality.
|
protected boolean |
equals(java.lang.Object v1,
java.lang.Object v2) |
<T extends ObjectDoublePredicate<? super KType>> |
forEach(T predicate)
Applies a given predicate to all keys-value pairs in this container.
|
<T extends ObjectDoubleProcedure<? super KType>> |
forEach(T procedure)
Applies a given procedure to all keys-value pairs in this container.
|
static <KType> ObjectDoubleHashMap<KType> |
from(KType[] keys,
double[] values)
Creates a hash map from two index-aligned arrays of key-value pairs.
|
double |
get(KType key) |
double |
getOrDefault(KType key,
double defaultValue) |
int |
hashCode() |
protected int |
hashKey(KType key)
Returns a hash code for the given key.
|
boolean |
indexExists(int index) |
double |
indexGet(int index)
Returns the value associated with an existing key.
|
void |
indexInsert(int index,
KType key,
double value)
Inserts a key-value pair for a key that is not present in the map.
|
int |
indexOf(KType key)
Returns a logical "index" of a given key that can be used to speed up
follow-up value setters or getters in certain scenarios (conditional
logic).
|
double |
indexReplace(int index,
double newValue)
Replaces the value associated with an existing key and returns any previous
value stored for that key.
|
boolean |
isEmpty() |
java.util.Iterator<ObjectDoubleCursor<KType>> |
iterator()
Returns a cursor over the entries (key-value pairs) in this map.
|
ObjectDoubleHashMap.KeysContainer |
keys()
Returns a specialized view of the keys of this associated container.
|
double |
put(KType key,
double value)
Place a given key and value in the container.
|
int |
putAll(java.lang.Iterable<? extends ObjectDoubleCursor<? extends KType>> iterable)
Puts all key/value pairs from a given iterable into this map.
|
int |
putAll(ObjectDoubleAssociativeContainer<? extends KType> container)
Puts all keys from another container to this map, replacing the values of
existing keys, if such keys are present.
|
boolean |
putIfAbsent(KType key,
double value)
Trove-inspired API method.
|
double |
putOrAdd(KType key,
double putValue,
double incrementValue)
If
key exists, putValue is inserted into the map,
otherwise any existing value is incremented by additionValue . |
protected void |
rehash(KType[] fromKeys,
double[] fromValues)
Rehash from old buffers to new buffers.
|
void |
release()
Removes all elements from the collection and additionally releases any
internal buffers.
|
double |
remove(KType key)
Remove all values at the given key.
|
int |
removeAll(ObjectContainer<? super KType> other)
Removes all keys (and associated values) present in a given container.
|
int |
removeAll(ObjectDoublePredicate<? super KType> predicate)
Removes all keys (and associated values) for which the predicate returns
true . |
int |
removeAll(ObjectPredicate<? super KType> predicate)
Removes all keys (and associated values) for which the predicate returns
true . |
protected void |
shiftConflictingKeys(int gapSlot)
Shift all the slot-conflicting keys and values allocated to
(and including)
slot . |
int |
size() |
java.lang.String |
toString()
Convert the contents of this map to a human-friendly string.
|
DoubleCollection |
values()
Returns a container view of all values present in this container.
|
protected double |
verifyLoadFactor(double loadFactor)
Validate load factor range and return it.
|
java.lang.String |
visualizeKeyDistribution(int characters)
Visually depict the distribution of keys.
|
public java.lang.Object[] keys
public double[] values
protected int keyMixer
hashKey(KType)
,
"http://issues.carrot2.org/browse/HPPC-80",
"http://issues.carrot2.org/browse/HPPC-103"protected int assigned
size()
instead).size()
protected int mask
keys
.protected int resizeAt
protected boolean hasEmptyKey
protected double loadFactor
keys
.protected HashOrderMixingStrategy orderMixer
keyMixer
public ObjectDoubleHashMap()
public ObjectDoubleHashMap(int expectedElements)
expectedElements
- The expected number of elements guaranteed not to cause buffer
expansion (inclusive).public ObjectDoubleHashMap(int expectedElements, double loadFactor)
expectedElements
- The expected number of elements guaranteed not to cause buffer
expansion (inclusive).loadFactor
- The load factor for internal buffers. Insane load factors (zero, full capacity)
are rejected by verifyLoadFactor(double)
.public ObjectDoubleHashMap(int expectedElements, double loadFactor, HashOrderMixingStrategy orderMixer)
expectedElements
- The expected number of elements guaranteed not to cause a rehash (inclusive).loadFactor
- The load factor for internal buffers. Insane load factors (zero, full capacity)
are rejected by verifyLoadFactor(double)
.orderMixer
- Hash key order mixing strategy. See HashOrderMixing
for predefined
implementations. Use constant mixers only if you understand the potential
consequences.public ObjectDoubleHashMap(ObjectDoubleAssociativeContainer<? extends KType> container)
public double put(KType key, double value)
put
in interface ObjectDoubleMap<KType>
public int putAll(ObjectDoubleAssociativeContainer<? extends KType> container)
putAll
in interface ObjectDoubleMap<KType>
public int putAll(java.lang.Iterable<? extends ObjectDoubleCursor<? extends KType>> iterable)
putAll
in interface ObjectDoubleMap<KType>
public boolean putIfAbsent(KType key, double value)
if (!map.containsKey(key)) map.put(value);
key
- The key of the value to check.value
- The value to put if key
does not exist.true
if key
did not exist and value
was placed in the map.public double putOrAdd(KType key, double putValue, double incrementValue)
key
exists, putValue
is inserted into the map,
otherwise any existing value is incremented by additionValue
.putOrAdd
in interface ObjectDoubleMap<KType>
key
- The key of the value to adjust.putValue
- The value to put if key
does not exist.incrementValue
- The value to add to the existing value if key
exists.key
(after
changes).public double addTo(KType key, double incrementValue)
incrementValue
to any existing value for the given key
or inserts incrementValue
if key
did not previously exist.addTo
in interface ObjectDoubleMap<KType>
key
- The key of the value to adjust.incrementValue
- The value to put or add to the existing value if key
exists.key
(after changes).public double remove(KType key)
remove
in interface ObjectDoubleMap<KType>
public int removeAll(ObjectContainer<? super KType> other)
keys().removeAll(container)but with no additional overhead.
removeAll
in interface ObjectDoubleAssociativeContainer<KType>
public int removeAll(ObjectDoublePredicate<? super KType> predicate)
true
.removeAll
in interface ObjectDoubleAssociativeContainer<KType>
public int removeAll(ObjectPredicate<? super KType> predicate)
true
.removeAll
in interface ObjectDoubleAssociativeContainer<KType>
public double get(KType key)
get
in interface ObjectDoubleMap<KType>
public double getOrDefault(KType key, double defaultValue)
getOrDefault
in interface ObjectDoubleMap<KType>
public boolean containsKey(KType key)
true
if this container has an association to a value
for the given key.containsKey
in interface ObjectDoubleAssociativeContainer<KType>
public int indexOf(KType key)
indexOf
in interface ObjectDoubleMap<KType>
key
- The key to locate in the map.ObjectDoubleMap.indexExists(int)
,
ObjectDoubleMap.indexGet(int)
,
ObjectDoubleMap.indexInsert(int, KType, double)
,
ObjectDoubleMap.indexReplace(int, double)
public boolean indexExists(int index)
indexExists
in interface ObjectDoubleMap<KType>
index
- The index of a given key, as returned from ObjectDoubleMap.indexOf(KType)
.true
if the index corresponds to an existing
key or false otherwise. This is equivalent to checking whether the
index is a positive value (existing keys) or a negative value
(non-existing keys).ObjectDoubleMap.indexOf(KType)
public double indexGet(int index)
indexGet
in interface ObjectDoubleMap<KType>
index
- The index of an existing key.ObjectDoubleMap.indexOf(KType)
public double indexReplace(int index, double newValue)
indexReplace
in interface ObjectDoubleMap<KType>
index
- The index of an existing key.ObjectDoubleMap.indexOf(KType)
public void indexInsert(int index, KType key, double value)
indexInsert
in interface ObjectDoubleMap<KType>
index
- The index of a previously non-existing key, as returned from
ObjectDoubleMap.indexOf(KType)
.ObjectDoubleMap.indexOf(KType)
public void clear()
clear
in interface ObjectDoubleMap<KType>
ObjectDoubleMap.release()
public void release()
ObjectDoubleMap.clear()
should be a better alternative since it'll avoid
reallocation.release
in interface ObjectDoubleMap<KType>
ObjectDoubleMap.clear()
public int size()
size
in interface ObjectDoubleAssociativeContainer<KType>
public boolean isEmpty()
isEmpty
in interface ObjectDoubleAssociativeContainer<KType>
true
if this hash map contains no assigned
keys.public int hashCode()
hashCode
in interface ObjectDoubleMap<KType>
hashCode
in class java.lang.Object
public boolean equals(java.lang.Object obj)
ObjectDoubleMap
and both objects contains exactly the same key-value
pairs.equals
in interface ObjectDoubleMap<KType>
equals
in class java.lang.Object
protected boolean equalElements(ObjectDoubleHashMap<?> other)
equals(Object, Object)
method.public void ensureCapacity(int expectedElements)
ensureCapacity
in interface Preallocable
expectedElements
- The total number of keys, inclusive.public java.util.Iterator<ObjectDoubleCursor<KType>> iterator()
Iterator.next()
. To read the current
key and value use the cursor's public fields. An example is shown below.
for (IntShortCursor c : intShortMap) { System.out.println("index=" + c.index + " key=" + c.key + " value=" + c.value); }
The index
field inside the cursor gives the internal index
inside the container's implementation. The interpretation of this index
depends on to the container.
iterator
in interface ObjectDoubleAssociativeContainer<KType>
iterator
in interface java.lang.Iterable<ObjectDoubleCursor<KType>>
public <T extends ObjectDoubleProcedure<? super KType>> T forEach(T procedure)
ObjectDoubleProcedure
. This
lets the caller to call methods of the argument by chaining the call (even
if the argument is an anonymous type) to retrieve computed values, for
example.forEach
in interface ObjectDoubleAssociativeContainer<KType>
public <T extends ObjectDoublePredicate<? super KType>> T forEach(T predicate)
ObjectDoublePredicate
. This
lets the caller to call methods of the argument by chaining the call (even
if the argument is an anonymous type) to retrieve computed values, for
example.
The iteration is continued as long as the predicate returns
true
.forEach
in interface ObjectDoubleAssociativeContainer<KType>
public ObjectDoubleHashMap.KeysContainer keys()
ObjectLookupContainer
.keys
in interface ObjectDoubleAssociativeContainer<KType>
public DoubleCollection values()
ObjectDoubleAssociativeContainer
values
in interface ObjectDoubleAssociativeContainer<KType>
public ObjectDoubleHashMap<KType> clone()
clone
in class java.lang.Object
public java.lang.String toString()
toString
in class java.lang.Object
public java.lang.String visualizeKeyDistribution(int characters)
ObjectDoubleMap
visualizeKeyDistribution
in interface ObjectDoubleMap<KType>
characters
- The number of characters to "squeeze" the entire buffer into.public static <KType> ObjectDoubleHashMap<KType> from(KType[] keys, double[] values)
protected int hashKey(KType key)
The default implementation mixes the hash of the key with keyMixer
to differentiate hash order of keys between hash containers. Helps
alleviate problems resulting from linear conflict resolution in open
addressing.
The output from this function should evenly distribute keys across the entire integer range.
protected double verifyLoadFactor(double loadFactor)
protected void rehash(KType[] fromKeys, double[] fromValues)
protected void allocateBuffers(int arraySize)
protected void allocateThenInsertThenRehash(int slot, KType pendingKey, double pendingValue)
protected void shiftConflictingKeys(int gapSlot)
slot
.protected boolean equals(java.lang.Object v1, java.lang.Object v2)
Copyright © 2015 Carrot Search s.c.. All Rights Reserved.