HashMap、Hashtable的区别
1.HashTable
- 底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低。
- 初始size为11,扩容:newsize = olesize*2+1
2.HashMap
hashMap的jdk7和jdk8有一定区别;
1.实现方式
jdk7中使用数组+链表来实现,jdk8使用的数组+链表+红黑树
2.新节点插入到链表是的插入顺序不同
jdk7插入在头部(在多线程扩容时容易造成死循环问题),jdk8插入在尾部
共同特点:
- 可以存储null键和null值,线程不安全
- 初始size为16,扩容:newsize = oldsize*2,size一定为2的n次幂
- 扩容针对整个Map,每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入