深入理解java中的HashMap
HashMap介绍
hashMap是java中一个非常重要的数据结构,工作中也会经常使用到。
HashMap与Map接口的关系
HashMap继承于AbstractMap类,实现了Map接口,Map是key-value键值对的接口,AbstractMap实现了"键值对"的通用函数接口。
TreeMap是基于树的实现,HashMap,HashTable,ConcurrentHashMap是基于hash表的实现
hashMap说明手册:https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
HashMap实现原理
HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对。
在JDK1.6,JDK1.7中,HashMap采用位桶(数组)+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,HashMap采用位桶+链表+红黑树实现,当链表长度超过阈值为8时,将链表转换为红黑树,这样大大减少了查找时间。