Java集合——HashMap

一、HashMap的底层结构:底层数据结构是哈希表,哈希表的底层数据结构是Entry数组+链表,每一个Entry包含一个key-value键值对。

二、向哈希表插入数据,使用put(k,v)方法。

put(k,v)方法具体流程:

1.先将k,v封装到node对象中,调用key的hashCode()方法得到key的hash值,通过哈希算法转化成数组下标、

2.如果数组上没有链表就将node添加到这里,然后通过equal()方法比对要插入的node的key和已经在链表上的key,如果返回的是false,则说明没有重复的key,将node加入链表的末尾。如果返回的是true,则覆盖掉之前的value。

三、向哈希表中查询数据,使用get(k,v)方法。

get(k,v)方法具体流程:

1.先调用key的hashCode()方法得出key哈希值,转化成数组下标。

2.如果该数组上什么都没有则返回null,若有单向链表,则比对key,若equal()方法返回false,那么get()方法返回null,若有个equal返回true,则get()方法返回这个key对应的value。

四、注意事项:

1.hashMap集合key部分的元素equal方法要重写,hashCode要重写

2.默认初始化容量是16(自己初始化的时候容应该2的幂),存的容量达到75%时,数组开始扩容,扩展倍数:2

3.JDK8以后,如果单向链表元素>=8时单向链表会变成红黑树,红黑树节点<=6又会变成单向链表结构

posted @ 2022-08-21 23:27  ikun、  阅读(43)  评论(0编辑  收藏  举报