A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© @白纸嘿字@   /  2015-9-20 23:43  /  7133 人查看  /  21 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

LLLLL 中级黑马 2015-10-9 20:41:45
21#
在 Java 中,Object 对象的 hashCode() 方法会根据不同的对象生成不同的哈希值,默认情况下为了确保这个哈希值的唯一性,是通过将该对象的内部地址转换成一个整数来实现的。

HashCode 其实只是在需要用到哈希算法的数据结构中才有用,比如在 HashMap 和 Hashtable中。

HashCode 的用途是为了方便快速地查找对象,当你重写了 hashCode() 后,HashCode 就不再是默认的对象内部地址了,而是你自己定义的一个值。

举个例子你或许更明白点:假如 a 和 b 是两个对象,你重写了 equals() 方法,你的目的肯定是希望它们两个相等。
现在有一个 HashMap,它的值是这样的 map.put(a,c); map 中插入了一条数据,键是 a 值是 c,现调用 map.get(a) 可以返回对象 c,但是调用 map.get(b); 却不能返回对象 c, 而在你最开始的定义中,a 和 b 两个对象是相等的,相等的对象却得不到相同的结果,这段代码就不符合逻辑了。因为 HashMap 是根据键对象的 HashCode 来进行快速查找的,所以你必须保证 a 和 b 这两个相同对象的 HashCode 也相同,因此你需要重写 hashCode() 方法。另外,如果你要用到 HashSet,在这个例子中 a 和 b 可以同时插入到 HashSet 中,然而这两个对象在逻辑上有时相等的,这不符合 HashSet 的定义。

总之,重写 hashCode 是为了让 Java 中所有使用到 Hash 算法的数据结构能够正常运行,当然如果你保证你的程序中完全不会用到 Hash 算法,那么你也可以不用重写。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马