com.carrotsearch.hppc.ObjectObjectIdentityHashMap Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hppc Show documentation
Show all versions of hppc Show documentation
High Performance Primitive Collections: data structures (maps, sets, lists, stacks, queues) generated for combinations of object and primitive types to conserve JVM memory and speed up execution.
package com.carrotsearch.hppc;
/* */
import java.util.Iterator;
import com.carrotsearch.hppc.cursors.*;
/* */
import static com.carrotsearch.hppc.Containers.*;
import static com.carrotsearch.hppc.HashContainers.*;
/**
* An identity hash map of Object
to Object
.
*/
@SuppressWarnings("all")
@com.carrotsearch.hppc.Generated(
date = "2018-05-21T12:24:06+0200",
value = "KTypeVTypeIdentityHashMap.java")
public class ObjectObjectIdentityHashMap
extends ObjectObjectHashMap
{
/**
* New instance with sane defaults.
*/
public ObjectObjectIdentityHashMap() {
this(DEFAULT_EXPECTED_ELEMENTS);
}
/**
* New instance with sane defaults.
* @param expectedElements
* The expected number of elements guaranteed not to cause buffer
* expansion (inclusive).
*/
public ObjectObjectIdentityHashMap(int expectedElements) {
this(expectedElements, DEFAULT_LOAD_FACTOR);
}
/**
* New instance with sane defaults.
*
* @param expectedElements
* The expected number of elements guaranteed not to cause buffer
* expansion (inclusive).
* @param loadFactor
* The load factor for internal buffers. Insane load factors (zero, full capacity)
* are rejected by {@link #verifyLoadFactor(double)}.
*/
public ObjectObjectIdentityHashMap(int expectedElements, double loadFactor) {
this(expectedElements, loadFactor, HashOrderMixing.randomized());
}
/**
* New instance with the provided defaults.
*
* @param expectedElements
* The expected number of elements guaranteed not to cause a rehash (inclusive).
* @param loadFactor
* The load factor for internal buffers. Insane load factors (zero, full capacity)
* are rejected by {@link #verifyLoadFactor(double)}.
* @param orderMixer
* Hash key order mixing strategy. See {@link HashOrderMixing} for predefined
* implementations. Use constant mixers only if you understand the potential
* consequences.
*/
public ObjectObjectIdentityHashMap(int expectedElements, double loadFactor, HashOrderMixingStrategy orderMixer) {
this.orderMixer = orderMixer;
this.loadFactor = verifyLoadFactor(loadFactor);
ensureCapacity(expectedElements);
}
/**
* Create a hash map from all key-value pairs of another container.
*/
public ObjectObjectIdentityHashMap(ObjectObjectAssociativeContainer extends KType, ? extends VType> container) {
this(container.size());
putAll(container);
}
@Override
public int hashKey(KType key) {
assert !((key) == null); // Handled as a special case (empty slot marker).
return BitMixer.mix(System.identityHashCode(key), this.keyMixer);
}
@Override
public boolean equals(Object v1, Object v2) {
return v1 == v2;
}
/* */
@Override
protected boolean equalElements(ObjectObjectHashMap, ?> other) {
if (other.size() != size()) {
return false;
}
Iterator extends ObjectObjectCursor, ?>> i = other.iterator();
while (i.hasNext()) {
ObjectObjectCursor, ?> c = i.next();
KType key = (KType) c.key;
if (!containsKey(key) ||
!equals(get(key), c.value)) { // Compare values using the same function as keys.
return false;
}
}
return true;
}
/* */
/**
* Creates a hash map from two index-aligned arrays of key-value pairs.
*/
public static ObjectObjectIdentityHashMap from(KType[] keys, VType[] values) {
if (keys.length != values.length) {
throw new IllegalArgumentException("Arrays of keys and values must have an identical length.");
}
ObjectObjectIdentityHashMap map = new ObjectObjectIdentityHashMap<>(keys.length);
for (int i = 0; i < keys.length; i++) {
map.put(keys[i], values[i]);
}
return map;
}
}