开发者学堂课程【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 类型
虽然允许你使用自定义的类作为 Key 的类型,但是也需要注意一点,
在实际的开发之中对于 Map 集合的 Key常用的类型就是:String、Long、Integer,尽量使用系统类。
面试题:如果在进行 HashMap 进行数据操作的时候出现了 Hash 冲突( Hash 码相同)
,HashMap 是如何解决的?
当出现了 Hash 冲突之后为了保证程序的正常执行,会在冲突的位置上将所有 Hash 冲突的内容转为链表保存。