1、 把某个非零常数值,比如17,保存在一个叫result的int类型的变量中。
2、 对于对象中的关键域f(指equals方法中考虑的每一个域),完成以下步骤:
A、为该域计算int类型的散列码c:
I、 如果该域是boolean类型,则计算(f ? 0 : 1)。
II、 如果该域是byte、char、short或者int类型,则计算(int)f。
III、 如果该域是long类型,则计算(int)(f ^ f ( f >> 32 ) )。
IV、 如果该域是float类型,则计算Float.floatToInitBits( f )。
V、 如果该域是double类型,则计算Double.doubleToLongBits( f )得到一个long类型的值,再执行步骤III。
VI、 如果该域是一个对象引用,并且该类的equals方法通过递归调用equals的方式来比较这个域,则同样对这个递归调用hashCode。如果要求一个更为复杂的比较,则为这个域计算一个规范表示,然后针对这个范式表示调用hashCode。如果这个域为NULL,则返回0或者其他常数。
VII、 如果该域是一个数组,则把每个元素当作单独的域来处理。也就是说,递归地应用上述规则,对每个重要的元素计算一个散列码,然后根据步骤B中的做法把这些散列码组合起来。
B、 按照下面的公式,把上面步骤的C组合到result中:
result = 17 * result + c;
3、 返回result。
4、 写完后测试是否相等的实例具有相同的散列码。
Apache Commons Lang里面有封装
org.apache.commons.lang.builder.HashCodeBuilder
public class Person {
String name;
int age;
boolean smoker;
...
public int hashCode() {
// you pick a hard-coded, randomly chosen, non-zero, odd number
// ideally different for each class
return new HashCodeBuilder(17, 37).
append(name).
append(age).
append(smoker).
toHashCode();
}
}
分享到:
相关推荐
在Java编程语言中,`hashCode()`和`equals()`方法是对象身份验证的关键组成部分,它们主要用于对象的比较和哈希表(如HashMap、HashSet等)的操作。理解这两个方法的工作原理对于编写高效和可靠的代码至关重要。 ...
Java 中的 hashCode 和 equals 方法详解 本文详细介绍了 Java 中的 hashCode 和 equals 方法,探讨了这两个方法的作用、实现机制和使用场景。通过对 hashCode 和 equals 方法的深入分析,我们可以更好地理解 Java ...
总之,理解并正确重写 `equals()` 和 `hashCode()` 方法对于编写高质量的Java代码至关重要,这直接影响到对象比较的逻辑以及使用哈希表的数据结构的效率。通过遵循上述原则和最佳实践,我们可以确保对象的比较行为...
### Java中`hashCode()`与`equals()`详解 #### 一、引言 在Java编程中,`hashCode()`和`equals()`方法是两个非常重要的概念,它们对于理解和使用Java中的集合框架(尤其是`HashSet`和`HashMap`)至关重要。本文将...
在Java编程语言中,`hashCode()`方法是`Object`类的一个重要成员,它用于生成对象的哈希码,这个哈希码是一个整数,通常用于优化基于哈希的集合操作,如`HashSet`、`HashMap`和`HashTable`。这些集合依赖于`hashCode...
本文介绍了Java语言不直接支持关联数组,可以使用任何对象作为一个索引的数组,但在根Object类中使用 hashCode()方法明确表示期望广泛使用HashMap。理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式...
在Java编程语言中,`equals()`和`hashCode()`方法是两个至关重要的概念,它们与对象的比较和哈希表操作紧密相关。理解这两个方法的工作原理及其契约是成为一名熟练的Java开发者所必需的。 首先,`equals()`方法是...
在编程世界中,Java语言以其跨平台性和强大的库支持成为了许多开发者的选择。为了写出高效、可维护、易于理解的Java代码,遵循一定的编码规范和最佳实践至关重要。以下是一些关于"JAVA代码编写的建议30条"的具体内容...
综上所述,理解和正确使用 `hashCode()` 和 `equals()` 方法对于编写高效且符合预期的Java代码至关重要,特别是在处理集合和映射数据结构时。遵循良好的重写规范可以提高容器的性能,并避免潜在的错误。
Java中的`synchronized`关键字是多线程编程中用于同步控制的关键元素,它的主要目标是解决并发环境下多个线程对共享资源的访问冲突。在Java中,由于线程共享内存空间,如果没有适当的同步机制,可能会导致数据不一致...
总的来说,理解和正确使用 `equals()` 和 `hashCode()` 是Java开发者必备的基础知识,这对于编写健壮、高效的代码至关重要。在进行对象比较和使用哈希表时,这两个方法的合理实现可以极大地提高程序的性能和正确性。
Java中的`hashCode()`方法是基于对象的内部状态计算出的一个整数值,它在处理集合特别是HashSet、HashMap等基于哈希表的数据结构时起着至关重要的作用。哈希码(Hash Code)被用来快速定位对象在哈希表中的位置,...
总的来说,理解并正确使用`equals()`和`hashCode()`方法对于编写高质量的Java代码至关重要,尤其是在处理集合框架中的对象时。这两个方法的合理实现能确保对象比较的正确性和哈希表操作的效率。希望这个深入解析能...
在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段以及方法等。本主题将深入探讨如何利用反射技术绕过编译器的一些限制,并介绍hashcode在高级应用中的用法。 ...
在Java编程语言中,`equals()` 和 `hashCode()` 方法是Object类中定义的基本方法,所有类都默认继承自Object类,因此每个Java对象都有这两个方法。这两个方法在处理集合类,尤其是Set接口的实现(如HashSet)时起着...
1.在 Java 中,hashCode 方法用于返回对象的哈希码,而 equals 方法用于比较两个对象的内容是否相等。 2.如果要重写一个对象的 equals 方法,还需要重写该对象的 hashCode 方法,以确保对象的哈希码正确。 六、Java...
重写`equals()`、`hashCode()`和`toString()`等方法是Java编程中的常见实践。这些方法用于比较对象的相等性、计算对象的哈希码以及返回对象的字符串表示。正确实现这些方法可以增强类的功能性和互操作性。例如,`...
在Java编程中,遵循良好的编码规范和实践是至关重要的,这不仅有助于提高代码的可读性和可维护性,还能确保团队间的协作效率。以下是一些关于JAVA代码编写的建议: 1. **命名约定**:Java代码中的类名应以大写字母...
在编程世界中,Java语言以其跨平台性、稳定性和丰富的库资源深受开发者喜爱。编写高效、可维护的Java代码是每个开发者的追求。以下是对Java编程的30条实用建议,旨在帮助提升代码质量,提高开发效率。 1. **遵循...
在Java编程语言中,`hashCode()` 和 `equals()`...了解并正确使用 `hashCode()` 和 `equals()` 是编写高质量Java代码的关键,特别是在处理集合框架和优化查找性能时。通过遵循上述原则,可以确保程序的稳定性和高效性。