hashCode规则

摘自Effective Java
1. Store some constant nonzero value, say, 17, in an int variable called result.
2. For each significant field f in your object (each field taken into account by the
equals method, that is), do the following:
a. Compute an int hash code c for the field:
i. If the field is a boolean, compute (f ? 1 : 0).
ii. If the field is a byte, char, short, or int, compute (int) f.
iii. If the field is a long, compute (int) (f ^ (f >>> 32)).
iv. If the field is a float, compute Float.floatToIntBits(f).
v. If the field is a double, compute Double.doubleToLongBits(f), and
then hash the resulting long as in step 2.a.iii.
vi. If the field is an object reference and this class’s equals method
compares the field by recursively invoking equals, recursively
invoke hashCode on the field. If a more complex comparison is
required, compute a “canonical representation” for this field and
invoke hashCode on the canonical representation. If the value of the
field is null, return 0 (or some other constant, but 0 is traditional).
47
48
CHAPTER 3
METHODS COMMON TO ALL OBJECTS
vii. If the field is an array, treat it as if each element were a separate field.
That is, compute a hash code for each significant element by applying
these rules recursively, and combine these values per step 2.b. If every
element in an array field is significant, you can use one of the
Arrays.hashCode methods added in release 1.5.
b. Combine the hash code c computed in step 2.a into result as follows:
result = 31 * result + c;
3. Return result.

例:
@Override public int hashCode() {
int result = 17;
result = 31 * result + areaCode;
result = 31 * result + prefix;
result = 31 * result + lineNumber;
return result;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
hashcodeJava中Object类的方法之一,用于计算对象的哈希码。哈希码是一个整数,在Object类中定义,通常用于快速唯一地标识对象。 在Java中,我们可以通过重写hashCode()方法来定制对象的哈希码。我们可以根据对象的特定属性或者一些计算规则来生成哈希码。在重新实现hashCode()方法时,需要遵循以下原则: 1. 如果两个对象通过equals()方法比较是相等的,那么它们的hashCode()方法返回的哈希码必须相等。 2. 如果两个对象通过equals()方法比较是不等的,那么它们的hashCode()方法返回的哈希码可以相等,也可以不等。 为了保证hashCode()方法的正确性和性能,一般的做法是使用对象中几个重要属性的hashCode()方法计算得到哈希码。这些属性应当是不变的、稳定的,并且能够唯一标识对象。常用的计算方法包括: 1. 将对象的所有重要属性进行异或运算(^),然后得到的结果作为哈希码。 2. 对象中某一重要属性(例如字符串)的hashCode()方法返回的哈希码,可以直接作为对象的哈希码。 由于哈希码是一个整数,在Java中可以被用于多种场景,包括: 1. 哈希表(HashMap、HashSet等)的插入、查找、删除等操作依赖于对象的哈希码。 2. 对象的哈希码可以被用于对象的存储和比较。 3. 可以根据对象的哈希码进行快速去重操作。 总而言之,hashCode()方法提供了一种便捷有效的方式来唯一标识对象和加速对象的查找、存储等操作。在使用时,我们可以根据对象的特点和需求来重写hashCode()方法,以便更好地利用哈希码的优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值