黑马程序员技术交流社区
标题: hashset的一个小问题 [打印本页]
作者: 刘郑瑞 时间: 2013-1-20 11:55
标题: hashset的一个小问题
为什么hashset中hashcode相同了还会调用equals方法呢?
作者: 蔡兆军 时间: 2013-1-20 12:01
先通过HashCode判断,HashCode没被复写的时候,是通过内存地址来推算的,所以必然不相等。所以要复写HashCode方法。在通过equals方法判断内容是否相等。
作者: 李光耀 时间: 2013-1-20 14:13
本帖最后由 李光耀 于 2013-1-20 14:17 编辑
因为Set集合中元素不可以重复的,
如果只通过hashCode算哈希值,例如 ”ab“ ”ba“ 哈希值最后算出相同了, 会认定他们是重复的,后存入的元素不会存入。
但是他们内容根本不相同。
当哈希值相同时,需要再判断一次。
这时候需要equals比较他们内容是否相同,这样双重判断保证该集合的元素唯一性。
哈希值不相同,存入。
哈希值相同,内容相同,不存。
哈希值相同 内容不相同,存入。
{:soso__16328543767435193123_3:}
作者: 刘郑瑞 时间: 2013-1-20 20:57
楼上正解
作者: cyh8807 时间: 2013-1-20 22:13
HashSet :底层数据结构是哈希表,存入其中的元素不能重复;线程是不同步。
HashSet是通过元素的两个方法,hashcode和equals来保证元素的唯一性。
如果元素的hashcode值相同,才会判断equals是否为true;
如果元素的hashcode值不同,不会调用equals()方法;
重点:HashSet对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals()方法。
因此如果使用的对象存入的集合类型是HashSet集合,一般都建议重写 hashCode()和equals()方法。
作者: 高浩 时间: 2013-1-21 23:00
HashSet不可以存储相同的元素,equals方法是用来判断该元素是否相同,如果不同才可以将元素添加进来,否则视为相同元素,不添加。
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |