《HashMap底层实现原理解析》

我们常见的有数据结构有三种结构:

1、数组结构 2、链表结构 3、哈希表结构

1、数组结构:

存储区间连续、内存占用严重、空间复杂度大

优点:随机读取和修改效率高,原因是数组是连续的(随机访问性强,查找速度快)
缺点:插入和删除数据效率低,因插入数据,这个位置后面的数据在内存中都要往后移动,且大小固定不易动态扩展。

2、链表结构:

存储区间离散、占用内存宽松、空间复杂度小

优点:插入删除速度快,内存利用率高,没有固定大小,扩展灵活
缺点:不能随机查找,每次都是从第一个开始遍历(查询效率低)

3、哈希表结构:

结合数组结构和链表结构的优点,从而实现了查询和修改效率高,插入和删除效率也高的一种数据结构。

1、hashmap的数据结构
要知道hashmap是什么,首先要搞清楚它的数据结构,在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,hashmap也不例外。Hashmap实际上是一个数组和链表的结合体(在数据结构中,一般称之为“链表散列“)

hasMap和hasTable的区别

hashMap:是不安全的:

底层实现是哈希表(链表+红黑树+数组),内部有一个entry对象,封装key和值,key只能唯一,key和value可以为null,是map集合的实现;

hashTable是线程安全的:

是hashMap的轻量级实现,hashMap允许null建和null值,hashTable不允许,由于hashMap是非线程安全的,所以hashMap效率相对而言比hashTable要高,看源码可知,hashTable各个方法都加入了同步锁