凡科做网站给后台的吗,WordPress万级数据优化,拓者设计吧注册码必须买吗,seo顾问服务 品达优化为什要重写hashcode#xff1f;
hashcode方法得到一个hash值其实是要起到一个比较作用#xff0c;比较两个未知的东西是不是同一个东西#xff0c;因为我们要求hashcode方法产生的hash值对于”同一个东西“得到的hash值是一样的。
那这种特性可以做到去重的效果#xff0…为什要重写hashcode
hashcode方法得到一个hash值其实是要起到一个比较作用比较两个未知的东西是不是同一个东西因为我们要求hashcode方法产生的hash值对于”同一个东西“得到的hash值是一样的。
那这种特性可以做到去重的效果因为同一个东西的hash值是一样的当我们将内容添加进容器时如果通过hash值来得到存放的位置那么相同的东西一定会被分配到同一个位置假设不同东西的hash值不同那么我们只需要判断通过hash得到的位置上是否已经存放内容如果没有存放说明容器没有我当前要存放的东西那我就放入其中如果有说明容器中已经有一样的东西存入那就不必再存入了。
hash值固然强大但是任然会出现不同的东西计算出的hash值一样的情况我们称之为哈希冲突。哈希冲突无法完全解决只能避免。
hash值很强大hashcode方法一个重要的功能就是我传入同一个东西时返回给我的hash值一定是一样的如果不重写hashcode方法默认使用object的hashcode方法这一原始计算hash值的方法是通过不同对象存放的内存地址计算hash值的那么两个内容上一致逻辑上判定成一样的东西但由于存放地址不同会产生不同的hash值于是原始的hashcode方法无法满足我们的需求我们必须要重写以满足我们的需求。
为什要重写equals
哈希冲突由谁来解决呢最简单直接的办法就是当哈希冲突时我们直接比较冲突对象的内容来判定它们是否是同一个东西。那为什么不直接来判定内容呢从根源上消除哈希冲突不使用hashcode方法因为直接比较每个对象中的内容远比通过内容产生一个哈希值先筛选如果哈希冲突再判断内容来的高效的多。
那为什么要重写hashcode的同时重写equals呢因为原始的object提供的equals方法只是通过来判断两个东西是否相等对于基本数据类型足够但是引用数据类型比较地址值的话原始equals方法完全无法满足我们通过内容判定两个对象是否相同的需求。