关于hashCode()与equals()的总结,所要知道的
来源:互联网 发布:linux中连接本地 编辑:程序博客网 时间:2024/06/07 07:21
HashCode的存在主要是用于查找的快捷性(性能),比如在set集合中,元素不可重复, equals方法可用于保证元素不重复,但是,如果每增加一个元素就检查一次,如果集合中现在已经有1000个元素,那么第1001个元素加入集合时,就要调用1000次equals方法。这显然会大大降低效率。
我们来看一下增加一个对象到集合中hashCode是怎么运行的:
当集合要添加新的对象时,先调用这个对象的 hashCode方法,得到对应的hashcode值(每一个实例对象在被创造时,总会有一个自己的hashcode),实际上在HashMap的具体实现中会用一个table保存已经存进去的对象的hashcode 值,如果table中没有该hashcode值,它就可以直接存进去,不用再进行任何比较了;如果存在该hashcode值, 就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址(也就是发生了Hash key相同导致冲突的情况,那么就在这个Hash key的地方产生一个链表,将所有产生相同HashCode的对象放到这个单链表上去,串在一起(很少出现)。)。所以这里存在一个冲突解决的问题,这样一来实际调用 equals方法的次数就大大降低了。
任何时候,两个不同对象有相同的哈希码,我们称之为希哈码冲突。冲突不要紧,它只是意味着有多个对象在同一个空间里,所以 HashMap 会再检查一遍来找正确的对象。大量的冲突将会降低系统的性能,但是它们不会导致错误的结果。
一个HashSet集合中判断两个元素相等的标准是 1、两个对象通过equals()方法比较相等;2、两个对象的hashcode()方法返回值也相等。也就是说两个条件如果有一个不成立(增加的元素与集合内元素不相等),对象就会被加入到Hashset集合中。
如果需要把一个类对象保存到hashset集合中,重写这个类的equals()方法和hashcode()方法时,应尽量保证两个对象通过equals()方法比较返回true时,它们的hashcode()方法返回值也相等。这是因为如果不这样做的话,一个与集合内相同的对象也可以被加入到hashset集合中,hashset本身要求元素不能相同,HashSet就失去了他本身的意义了(不能有相同的元素)。
- 关于hashCode()与equals()的总结,所要知道的
- hashcode 与 equals的区别
- hashmap的hashcode 与equals
- equals与hashcode的关系
- equals 与hashCode 的关系
- hashCode()与equals()的关联
- 关于hashCode与equals
- equals与hashCode总结
- hashcode与equals 总结
- 关于equals与hashcode方法的重写原则
- 关于覆写equals与hashCode的问题。
- java中hashCode方法与equals方法的用法总结
- java中hashCode方法与equals方法的用法总结
- java中hashCode方法与equals方法的用法总结
- java中hashCode方法与equals方法的用法总结
- java中hashCode方法与equals方法的用法总结
- java中hashCode方法与equals方法的用法总结
- 关于Object的equals()及hashCode()
- The Festive Evening(思维题)
- C++ auto
- 通过KBUILD_MODNAME让dev_err等函数打印模块的name
- 万里长征第一步----学会做科研
- Android数据库(SQLite)框架(8)—— 总结
- 关于hashCode()与equals()的总结,所要知道的
- MAC上好用的 PDF编辑软件 PDFpenPro
- MySQL中GROUP_CONCAT中的排序和替换
- 纯JS省市区联动
- 数据库图形化安装
- java基础知识
- XYNU OJ 1102: 例题6-4 矩阵转置
- 深度卷积网络CNN与图像语义分割
- 使用shadowsocks来用谷歌