Class HashCodeBuilder

java.lang.Object
org.aoju.bus.core.builder.HashCodeBuilder
All Implemented Interfaces:
Serializable, Builder<Integer>

public class HashCodeBuilder extends Object implements Builder<Integer>
协助实现Object.hashCode()方法

下面是采取的方法。添加数据字段时,将当前总数乘以乘数,然后添加该数据类型的相关值。 例如,如果当前的hashCode是17,而乘数是37,整数45将创建一个674的散列代码,17 * 37 + 45.

 public class Person {
   String name;
   int age;
   boolean smoker;
   ...

   public int hashCode() {
     return new HashCodeBuilder(17, 37).
       append(name).
       append(age).
       append(smoker).
       toHashCode();
   }
 }
 
Since:
Java 17+
Author:
Kimi Liu
See Also:
  • Constructor Details

    • HashCodeBuilder

      public HashCodeBuilder()
    • HashCodeBuilder

      public HashCodeBuilder(int initialOddNumber, int multiplierOddNumber)
      必须输入两个随机选择的奇数。理想情况下, 每个类应该是不同的,但是这不是很重要.
      Parameters:
      initialOddNumber - 用作初值的奇数
      multiplierOddNumber - 用作乘法器的奇数
  • Method Details

    • reflectionHashCode

      public static int reflectionHashCode(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber, Object object)
    • reflectionHashCode

      public static int reflectionHashCode(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber, Object object, boolean testTransients)
    • reflectionHashCode

      public static <T> int reflectionHashCode(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber, T object, boolean testTransients, Class<? super T> reflectUpToClass, String... excludeFields)
      使用反射从Object的字段构建有效的散列代码

      它使用AccessibleObject.setAccessible 获得对私有字段的访问权。 这意味着如果权限没有正确设置,则在安全管理器下运行时将抛出安全异常。它也没有显式测试那么有效.

      Type Parameters:
      T - 所涉及对象的类型
      Parameters:
      initialNonZeroOddNumber - initialNonZeroOddNumber非零,奇数作为初始值。如果在散列代码中没有找到包含的字段,则返回该值
      multiplierNonZeroOddNumber - 用作乘法器的非零的奇数
      object - 用于创建hashCode的对象
      testTransients - 是否包含瞬态字段
      reflectUpToClass - 反映到(包括)的超类可以是null
      excludeFields - 在计算哈希码时要排除的字段名数组
      Returns:
      int散列码
    • reflectionHashCode

      public static int reflectionHashCode(Object object, boolean testTransients)
    • reflectionHashCode

      public static int reflectionHashCode(Object object, Collection<String> excludeFields)
    • reflectionHashCode

      public static int reflectionHashCode(Object object, String... excludeFields)
    • append

      public HashCodeBuilder append(boolean value)
    • append

      public HashCodeBuilder append(boolean[] array)
    • append

      public HashCodeBuilder append(byte value)
    • append

      public HashCodeBuilder append(byte[] array)
    • append

      public HashCodeBuilder append(char value)
    • append

      public HashCodeBuilder append(char[] array)
    • append

      public HashCodeBuilder append(double value)
    • append

      public HashCodeBuilder append(double[] array)
    • append

      public HashCodeBuilder append(float value)
    • append

      public HashCodeBuilder append(float[] array)
    • append

      public HashCodeBuilder append(int value)
    • append

      public HashCodeBuilder append(int[] array)
    • append

      public HashCodeBuilder append(long value)
    • append

      public HashCodeBuilder append(long[] array)
    • append

      public HashCodeBuilder append(Object object)
    • append

      public HashCodeBuilder append(Object[] array)
    • append

      public HashCodeBuilder append(short value)
    • append

      public HashCodeBuilder append(short[] array)
    • appendSuper

      public HashCodeBuilder appendSuper(int superHashCode)
    • toHashCode

      public int toHashCode()
    • build

      public Integer build()
      Description copied from interface: Builder
      包装唯一键(System.identityHashCode())使对象只有和自己 equals 此对象用于消除小概率下System.identityHashCode()产生的ID重复问题
      Specified by:
      build in interface Builder<Integer>
      Returns:
      被构建的对象
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object