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又会变成单向链表结构