Class HashCode


  • public final class HashCode
    extends java.lang.Object
    This class is a convenience method to sequentially calculate hash code of the object based on the field values. The result depends on the order of elements appended. The exact formula is the same as for java.util.List.hashCode. If you need order independent hash code just summate, multiply or XOR all elements.

    Suppose we have class:

    
     class Thing {
         long id;
         String name;
         float weight;
     }
     
    The hash code calculation can be expressed in 2 forms.

    For maximum performance:

    
     public int hashCode() {
         int hashCode = HashCode.EMPTY_HASH_CODE;
         hashCode = HashCode.combine(hashCode, id);
         hashCode = HashCode.combine(hashCode, name);
         hashCode = HashCode.combine(hashCode, weight);
         return hashCode;
     }
     

    For convenience:

     public int hashCode() {
         return new HashCode().append(id).append(name).append(weight).hashCode();
     }
     
    See Also:
    List.hashCode()
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static int EMPTY_HASH_CODE
      The hashCode value before any data is appended, equals to 1.
      private int hashCode  
    • Constructor Summary

      Constructors 
      Constructor Description
      HashCode()  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      HashCode append​(boolean value)
      Appends value's hashCode to the current hashCode.
      HashCode append​(double value)
      Appends value's hashCode to the current hashCode.
      HashCode append​(float value)
      Appends value's hashCode to the current hashCode.
      HashCode append​(int value)
      Appends value's hashCode to the current hashCode.
      HashCode append​(long value)
      Appends value's hashCode to the current hashCode.
      HashCode append​(java.lang.Object value)
      Appends value's hashCode to the current hashCode.
      static int combine​(int hashCode, boolean value)
      Combines hashCode of previous elements sequence and value's hashCode.
      static int combine​(int hashCode, double value)
      Combines hashCode of previous elements sequence and value's hashCode.
      static int combine​(int hashCode, float value)
      Combines hashCode of previous elements sequence and value's hashCode.
      static int combine​(int hashCode, int value)
      Combines hashCode of previous elements sequence and value's hashCode.
      static int combine​(int hashCode, long value)
      Combines hashCode of previous elements sequence and value's hashCode.
      static int combine​(int hashCode, java.lang.Object value)
      Combines hashCode of previous elements sequence and value's hashCode.
      int hashCode()
      Returns accumulated hashCode
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • EMPTY_HASH_CODE

        public static final int EMPTY_HASH_CODE
        The hashCode value before any data is appended, equals to 1.
        See Also:
        List.hashCode(), Constant Field Values
      • hashCode

        private int hashCode
    • Constructor Detail

      • HashCode

        public HashCode()
    • Method Detail

      • hashCode

        public final int hashCode()
        Returns accumulated hashCode
        Overrides:
        hashCode in class java.lang.Object
      • combine

        public static int combine​(int hashCode,
                                  boolean value)
        Combines hashCode of previous elements sequence and value's hashCode.
        Parameters:
        hashCode - previous hashCode value
        value - new element
        Returns:
        combined hashCode
      • combine

        public static int combine​(int hashCode,
                                  long value)
        Combines hashCode of previous elements sequence and value's hashCode.
        Parameters:
        hashCode - previous hashCode value
        value - new element
        Returns:
        combined hashCode
      • combine

        public static int combine​(int hashCode,
                                  float value)
        Combines hashCode of previous elements sequence and value's hashCode.
        Parameters:
        hashCode - previous hashCode value
        value - new element
        Returns:
        combined hashCode
      • combine

        public static int combine​(int hashCode,
                                  double value)
        Combines hashCode of previous elements sequence and value's hashCode.
        Parameters:
        hashCode - previous hashCode value
        value - new element
        Returns:
        combined hashCode
      • combine

        public static int combine​(int hashCode,
                                  java.lang.Object value)
        Combines hashCode of previous elements sequence and value's hashCode.
        Parameters:
        hashCode - previous hashCode value
        value - new element
        Returns:
        combined hashCode
      • combine

        public static int combine​(int hashCode,
                                  int value)
        Combines hashCode of previous elements sequence and value's hashCode.
        Parameters:
        hashCode - previous hashCode value
        value - new element
        Returns:
        combined hashCode
      • append

        public final HashCode append​(int value)
        Appends value's hashCode to the current hashCode.
        Parameters:
        value - new element
        Returns:
        this
      • append

        public final HashCode append​(long value)
        Appends value's hashCode to the current hashCode.
        Parameters:
        value - new element
        Returns:
        this
      • append

        public final HashCode append​(float value)
        Appends value's hashCode to the current hashCode.
        Parameters:
        value - new element
        Returns:
        this
      • append

        public final HashCode append​(double value)
        Appends value's hashCode to the current hashCode.
        Parameters:
        value - new element
        Returns:
        this
      • append

        public final HashCode append​(boolean value)
        Appends value's hashCode to the current hashCode.
        Parameters:
        value - new element
        Returns:
        this
      • append

        public final HashCode append​(java.lang.Object value)
        Appends value's hashCode to the current hashCode.
        Parameters:
        value - new element
        Returns:
        this