自定义 Map 的 key 类型|学习笔记

简介: 快速学习自定义 Map 的 key 类型

开发者学堂课程【Java 高级编程自定义 Map 的 key 类型】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/20/detail/421


自定义 Map 的 key 类型


关于 Key 的定义

在使用 Map 集合的时候可以发现对于 Key 和  Value 的类型实际上都可以由使用者任意决定,那么也就意味着现在依然可以使用自定义的类来进行 Key 类型的设置

对于自定义 Key 类型所在的类中一定要覆写 hashCode()  与 equals() 方法,否则无法查找到。

public v put(K key , v value) {

return putVal(hash( key), key, value, false, true);

在进行数据保存的时候发现会自动使用传入的 key  的数据生成一个 hash码,也就是说存储的时候是有这个Hash  数值。

public v get (object key) {

Node<K,V> e;

return (e = getNode(hash(key), key ) ) == null ?null : e.value;

}

在根据 key 获取数据的时候依然要将传入的 key 通过 hash() 方法来获取其对应的 hash 码,那么也就证明,查询的过程之中首先

要利用 hashCode() 来进行数据查询的时候还需要使用到 equals() 方法

范例:使用自定义类作为 Key 类型

图片18.png

虽然允许你使用自定义的类作为 Key 的类型,但是也需要注意一点,

在实际的开发之中对于 Map 集合的 Key常用的类型就是:String、Long、Integer,尽量使用系统类。

 

面试题:如果在进行 HashMap 进行数据操作的时候出现了 Hash  冲突(  Hash 码相同)

 

,HashMap 是如何解决的?

当出现了 Hash  冲突之后为了保证程序的正常执行,会在冲突的位置上将所有 Hash 冲突的内容转为链表保存。

图片19.png


相关文章
|
5月前
|
存储 安全 Go
|
4月前
|
存储 Dart
Dart的Map类型
Dart的Map类型
|
2月前
|
JavaScript 前端开发
Vue中传递自定义参数到后端、后端获取数据(使用Map接收参数)
这篇文章讲述了如何在Vue中通过Axios二次封装传递自定义参数到后端,并展示了后端如何使用Map接收这些参数,以及如何避免参数转换错误和统一接口设计的方法。
|
4月前
|
存储 Java API
探讨Java中交换Map的Key和Value值的技术
探讨Java中交换Map的Key和Value值的技术
31 2
|
4月前
|
存储 缓存 Java
Java交换map的key和value值
在Java中,直接交换`Map`的key和value是不允许的,因为key是唯一的且不可变。不过,可以通过创建新`Map`实现交换:将原`Map`的value作为新key,key作为新value。注意,如果原`Map`有重复value或null,需额外处理。以下是一个代码示例,展示了如何在value唯一且非null的情况下交换`Map`的key和value。对于重复value或null值的情况,可以使用`List`存储多个key或忽略null值。在实际应用中,`Map`常用于缓存、配置管理、数据库结果映射等多种场景。
55 1
|
3月前
|
定位技术
vue-baidu-map 自定义地图主题
vue-baidu-map 自定义地图主题
171 0
|
4月前
|
存储 C++ 容器
【C++】学习笔记——map和set
【C++】学习笔记——map和set
29 0
|
4月前
|
JSON Go 数据格式
Go 语言基础之指针、复合类型【数组、切片、指针、map、struct】(4)
Go 语言基础之指针、复合类型【数组、切片、指针、map、struct】
|
4月前
|
Java 编译器 Go
Go 语言基础之指针、复合类型【数组、切片、指针、map、struct】(3)
Go 语言基础之指针、复合类型【数组、切片、指针、map、struct】
|
4月前
|
存储 安全 Go
Go 语言基础之指针、复合类型【数组、切片、指针、map、struct】(2)
Go 语言基础之指针、复合类型【数组、切片、指针、map、struct】
下一篇
无影云桌面