HashMap和Hashtable的整体认识

1.相同点
都实现了Map接口,都是一种以key-value存储数据的键值对数据结构;
底层数据结构都是数组+链表(解决不hash冲突);

2.不同点
a.HashMap的key和value都允许为空,Hashtable的key和value都不允许为空;
b.扩容的规则不同;
newThr = oldThr << 1; (HashMap的扩容规则,原来的两倍)
int newCapacity = (oldCapacity << 1) + 1;(Hashtable的扩容规则,原来的两倍+1)
c.HashMap线程不安全,Hashtable线程安全(每一个方法都加了synchronized方法,正因为这样,修改数据的时候,会锁住整个数据结构,效率低下,现在基本上不使用)
d.添加元素的时候,计算下标的方式不一样
n = (tab = resize()).length;i = (n - 1) & hash;(HashMap的计算方式)
index = (hash & 0x7FFFFFFF) % tab.length;(Hashtable的计算方式)

猜你喜欢

转载自blog.csdn.net/weixin_39283212/article/details/89448789