All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.carrotsearch.hppc.ObjectObjectIdentityHashMap Maven / Gradle / Ivy

Go to download

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.

There is a newer version: 0.10.0
Show newest version
  
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 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> 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;
  }  
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy