自定义对象作为map哈希表的 键key 时【为啥建议要重写hashCode( )、equals( ) 方法】

简介: 自定义对象作为map哈希表的 键key 时【为啥建议要重写hashCode( )、equals( ) 方法】

自定义对象作为map哈希表的 键key 时【为啥建议要重写hashCode()、equals() 方法】


 

1,为啥建议要重写hashCode()

■  为啥要重写hashCode(); //不重写,默认是比较内存地址。

✿ hashCode() 什么时候用、hashCode() 的作用? ---生成【哈希表(数组)】索引

ps:哈希表【本质上就是一个数组【索引-> 存储结点元素】

索引:是先将计算得到的哈希值,与数组长度 & 【也可以%,不过效率不高】得出。

● 细节:计算出来得到的哈希值不同,但是经过&运算【结合考虑到数组长度】

 

 

2,为啥建议要重写 equals() 方法?

■  为啥要重写equals(); //不重写,默认是比较内存地址。

equals() 什么时候用、equals() 的作用 ? ---解决hashCode 冲突时,比较两个key是否相等


17.png


3,疑惑:为啥要重写 equals(); 使用哈希值【即只重写hashCode()方法】比较不行吗?

当key 不同【例如key的类型不同,String、Integer最后可能算出来相同的hashCode】时,可能算出来相同的哈希值,可以得到相同的索引。导致新的【key-value】结点覆盖到原的【key-value】结点,发生hashCode冲突。

 

//重写equals() 用来比较两个对象【例如两个对象的引用作为 key 存储在哈希表map 中,重写equals() 就可以比较key 是否相等。】

目录
相关文章
|
6月前
|
安全 Java API
【Java性能优化】Map.merge()方法:告别繁琐判空,3行代码搞定统计累加!
在日常开发中,我们经常需要对Map中的值进行累加统计。}else{代码冗长,重复调用get()方法需要显式处理null值非原子操作,多线程下不安全今天要介绍的方法,可以让你用一行代码优雅解决所有这些问题!方法的基本用法和优势与传统写法的对比分析多线程安全版本的实现Stream API的终极优化方案底层实现原理和性能优化建议一句话总结是Java 8为我们提供的Map操作利器,能让你的统计代码更简洁、更安全、更高效!// 合并两个列表});简单累加。
611 0
|
9月前
|
编译器 容器
哈希表模拟封装unordered_map和unordered_set
哈希表模拟封装unordered_map和unordered_set
|
存储
`map()`方法在什么场景下会比 `forEach()`方法更高效?
综上所述,当需要对数组元素进行复杂的转换并生成新数组、进行链式调用和函数式编程、处理元素之间存在明确映射关系的情况以及与其他数组方法结合使用时,`map()`方法比`forEach()`方法更高效,能够使代码更加简洁、清晰和易于维护。
172 32
WK
|
Python
Python中format_map()方法
在Python中,`format_map()`方法用于使用字典格式化字符串。它接受一个字典作为参数,用字典中的键值对替换字符串中的占位符。此方法适用于从字典动态获取值的场景,尤其在处理大量替换值时更为清晰和方便。
WK
382 36
|
JavaScript 前端开发
JavaScript Array map() 方法
JavaScript Array map() 方法
|
存储 JavaScript 前端开发
如何选择使用`map()`方法和`forEach()`方法?
选择使用`map()`方法还是`forEach()`方法主要取决于操作的目的、是否需要返回值、代码的可读性和维护性等因素。在实际开发中,需要根据具体的业务需求和场景来灵活选择合适的方法,以实现更高效、更易读和更易维护的代码。
163 3
ES6中map对象的使用,确实比Object好使哈
ES6中Map对象的使用优势,包括任意类型作为键、直接获取大小、增删查改操作等。Map的键可以是函数、对象、NaN等,支持forEach循环和for...of循环。
167 1
ES6中map对象的使用,确实比Object好使哈
|
存储 Java API
Java交换map的key和value值
通过本文介绍的几种方法,可以在Java中实现Map键值对的交换。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。对于简单的键值对交换,可以使用简单遍历法或Java 8的Stream API;对于需要处理值不唯一的情况,可以使用集合存储或Guava的Multimap。希望本文对您理解和实现Java中的Map键值对交换有所帮助。
263 1
|
存储 JavaScript 前端开发
《进阶篇第8章:vuex》包括理解vuex、安装vuex、搭建vuex环境、四个map方法的使用、模块化+名命空间
《进阶篇第8章:vuex》包括理解vuex、安装vuex、搭建vuex环境、四个map方法的使用、模块化+名命空间
114 3
|
Java
vue2知识点:vuex中四个map方法的使用,包括:mapState、mapGetters、mapMutations、mapActions
vue2知识点:vuex中四个map方法的使用,包括:mapState、mapGetters、mapMutations、mapActions
800 1

热门文章

最新文章