作用
提高查询效率
常规的查询:一一的比较 但是仔细一想这样很耗性能 比如现在已经有一万个数据 添加一个进来需要对比一万次 那性能开销就太大了
原理
将数据根据特定的算法映射到一个固定地址上 相当于一人一个座位(内存地址) 一人一个座位号(HashCode)的意思 一旦某个座位上有人 那么才和这个座位上的人eqauls比较 同一个人则不分配 不同则分配其他位置(散列) 如果这个座位上没人 则直接就坐
基于实现以上的需求 Java对eqauls
和hashCode
做了以下的规定:
- 如果eqauls为true 则两者的hashCode一定相同
- 如果两者的hashCode相同 eqauls不一定为true;hashCode不同 那么eqauls一定不为true
于是可以得出以下结论:
对比两个对象是否相等最可靠的做法是eqauls
这里也就体现了hashCode
对查询效率的优化:
首先 hashcode对比的效率会高于eqauls 那么在上的上述的场景中 我们可以先通过hashcode来对比 如果不一样就不需要eqauls对比 如果一样再通eqauls对比增加可靠性 这种方案既准确也高效
补充
哪些情况下hashCode
会相同?
- 相同的字符串
- 大小一样的Integer
网友评论