Package org.aoju.bus.core.builder
Class HashCodeBuilder
java.lang.Object
org.aoju.bus.core.builder.HashCodeBuilder
- All Implemented Interfaces:
Serializable,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:
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.aoju.bus.core.builder.Builder
Builder.HashKey -
Constructor Summary
ConstructorsConstructorDescriptionHashCodeBuilder(int initialOddNumber, int multiplierOddNumber) 必须输入两个随机选择的奇数。 -
Method Summary
Modifier and TypeMethodDescriptionappend(boolean value) append(boolean[] array) append(byte value) append(byte[] array) append(char value) append(char[] array) append(double value) append(double[] array) append(float value) append(float[] array) append(int value) append(int[] array) append(long value) append(long[] array) append(short value) append(short[] array) appendSuper(int superHashCode) build()包装唯一键(System.identityHashCode())使对象只有和自己 equals 此对象用于消除小概率下System.identityHashCode()产生的ID重复问题inthashCode()static intreflectionHashCode(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber, Object object) static intreflectionHashCode(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber, Object object, boolean testTransients) static <T> intreflectionHashCode(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber, T object, boolean testTransients, Class<? super T> reflectUpToClass, String... excludeFields) 使用反射从Object的字段构建有效的散列代码static intreflectionHashCode(Object object, boolean testTransients) static intreflectionHashCode(Object object, String... excludeFields) static intreflectionHashCode(Object object, Collection<String> excludeFields) int
-
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- 反映到(包括)的超类可以是nullexcludeFields- 在计算哈希码时要排除的字段名数组- Returns:
- int散列码
-
reflectionHashCode
-
reflectionHashCode
-
reflectionHashCode
-
append
-
append
-
append
-
append
-
append
-
append
-
append
-
append
-
append
-
append
-
append
-
append
-
append
-
append
-
append
-
append
-
append
-
append
-
appendSuper
-
toHashCode
public int toHashCode() -
build
-
hashCode
-