Class HashCommon.EnumHasher

java.lang.Object
squidpony.squidmath.HashCommon.EnumHasher
All Implemented Interfaces:
Serializable, CrossHash.IHasher
Enclosing class:
HashCommon

public static class HashCommon.EnumHasher
extends Object
implements CrossHash.IHasher
See Also:
Serialized Form
  • Constructor Summary

    Constructors 
    Constructor Description
    EnumHasher()  
  • Method Summary

    Modifier and Type Method Description
    boolean areEqual​(Object left, Object right)
    Not all types you might want to use an IHasher on meaningfully implement .equals(), such as array types; in these situations the areEqual method helps quickly check for equality by potentially having special logic for the type this is meant to check.
    int hash​(Object data)
    If data is a type that this IHasher can specifically hash, this method should use that specific hash; in other situations, it should simply delegate to calling Object.hashCode() on data.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

  • Method Details

    • hash

      public int hash​(Object data)
      Description copied from interface: CrossHash.IHasher
      If data is a type that this IHasher can specifically hash, this method should use that specific hash; in other situations, it should simply delegate to calling Object.hashCode() on data. The body of an implementation of this method can be very small; for an IHasher that is meant for byte arrays, the body could be: return (data instanceof byte[]) ? CrossHash.Lightning.hash((byte[]) data) : data.hashCode();
      Specified by:
      hash in interface CrossHash.IHasher
      Parameters:
      data - the Object to hash; this method should take any type but often has special behavior for one type
      Returns:
      a 32-bit int hash code of data
    • areEqual

      public boolean areEqual​(Object left, Object right)
      Description copied from interface: CrossHash.IHasher
      Not all types you might want to use an IHasher on meaningfully implement .equals(), such as array types; in these situations the areEqual method helps quickly check for equality by potentially having special logic for the type this is meant to check. The body of implementations for this method can be fairly small; for byte arrays, it looks like: return left == right || ((left instanceof byte[] && right instanceof byte[]) ? Arrays.equals((byte[]) left, (byte[]) right) : Objects.equals(left, right)); , but for multidimensional arrays you should use the CrossHash.equalityHelper(Object[], Object[], IHasher) method with an IHasher for the inner arrays that are 1D or otherwise already-hash-able, as can be seen in the body of the implementation for 2D char arrays, where charHasher is an existing IHasher that handles 1D arrays: return left == right || ((left instanceof char[][] && right instanceof char[][]) ? equalityHelper((char[][]) left, (char[][]) right, charHasher) : Objects.equals(left, right));
      Specified by:
      areEqual in interface CrossHash.IHasher
      Parameters:
      left - allowed to be null; most implementations will have special behavior for one type
      right - allowed to be null; most implementations will have special behavior for one type
      Returns:
      true if left is equal to right (preferably by value, but reference equality may sometimes be needed)