package com.carrotsearch.hppc;
import static com.carrotsearch.hppc.HashContainers.*;
import static com.carrotsearch.hppc.Containers.*;
A reference-equality (identity) hash set.
/**
* A reference-equality (identity) hash set.
*/
public class ObjectIdentityHashSet<KType> extends ObjectHashSet<KType> {
New instance with sane defaults.
/**
* New instance with sane defaults.
*/
public ObjectIdentityHashSet() {
this(DEFAULT_EXPECTED_ELEMENTS, DEFAULT_LOAD_FACTOR);
}
New instance with sane defaults.
/**
* New instance with sane defaults.
*/
public ObjectIdentityHashSet(int expectedElements) {
this(expectedElements, DEFAULT_LOAD_FACTOR);
}
New instance with sane defaults.
/**
* New instance with sane defaults.
*/
public ObjectIdentityHashSet(int expectedElements, double loadFactor) {
this(expectedElements, loadFactor, HashOrderMixing.randomized());
}
New instance with the provided defaults.
Params: - 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
ObjectHashSet.verifyLoadFactor(double)
. - orderMixer – Hash key order mixing strategy. See
HashOrderMixing
for predefined implementations. Use constant mixers only if you understand the potential consequences.
/**
* 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 ObjectIdentityHashSet(int expectedElements, double loadFactor, HashOrderMixingStrategy orderMixer) {
this.orderMixer = orderMixer;
this.loadFactor = verifyLoadFactor(loadFactor);
ensureCapacity(expectedElements);
}
New instance copying elements from another ObjectContainer
. /**
* New instance copying elements from another {@link ObjectContainer}.
*/
public ObjectIdentityHashSet(ObjectContainer<? extends KType> container) {
this(container.size());
addAll(container);
}
@Override
protected int hashKey(KType key) {
assert key != null; // Handled as a special case (empty slot marker).
return BitMixer.mix(key, this.keyMixer);
}
@Override
protected boolean equals(Object v1, Object v2) {
return v1 == v2;
}
Create a set from a variable number of arguments or an array of
KType
. The elements are copied from the argument to the
internal buffer.
/**
* Create a set from a variable number of arguments or an array of
* <code>KType</code>. The elements are copied from the argument to the
* internal buffer.
*/
@SafeVarargs
public static <KType> ObjectIdentityHashSet<KType> from(KType... elements) {
final ObjectIdentityHashSet<KType> set = new ObjectIdentityHashSet<KType>(elements.length);
set.addAll(elements);
return set;
}
}