HashMap是基于Map接口的实现,采用key-value形式存储,在项目开发中,这种容器使用是非常广泛的,本文主要就是对HashMap的底层原理做个剖析,首先对比HashMap与HashTable的区别,然后以jdk1.7为例介绍HashMap的实现,再介绍jdk1.8做的改动。
对比:HashTable、HashMap
- Hashtable 是早期Java类库提供的一个哈希表实现,本身是同步的,不支持 null 键和值,由于同步导致的性能开销,所以已经很少被推荐使用。
- HashMap与 HashTable主要区别在于 HashMap 不是同步的,支持 null 键和值等。通常情况下,HashMap 进行 put 或者 get 操作,可以达到常数时间的性能,所以它是绝大部分利用键值对存取场景的首选
储存结构
既然HashMap是一种容器,首先需要了解他的储存结构,在HashMap中我们看到有如下属性
原来HashMap底层是用数组作为存储结构,那么Entry又是什么呢?
Entry的作用是把key、value封装成一个对象,next属性指向下一个Entry,由此我们可以得出HashMap的存储结构是数组+链表的结构,就像这样<