HashMap与HashTable区别

本章节基于主流的jdk8;废话不多说,走你!


 

1、安全性

HashMap是线程非安全的,Hashtable是线程安全的。

查看源码可以发现,Hashtable.put() 是用 synchronized 修饰的线程安全的同步方法

HashMap.put()部分源码:

 

putVal()方法自行查阅jdk源码;不多累赘;

HashTable.put()部分源码:

2、数据格式

HashMap的key、value可以为null,Hashtable的key、value不能为null

HashTable.put()源代码:

3、初始化容量及容量不足

HashMap不指定容量时,默认容量为16,容量不足扩容为原来的2倍;HashMap如果指定了容量大小,那么HashMap会将其扩容为2的幂次方大小。  

HashMap:

 

Hashtable不指定容量时,默认容量为11,容量不足时扩容为原来的2倍+1;Hashtable如果指定了容量大小,那么容量大小就是所指定的容量。 

HashTable:

4、索引位置计算

获得元素在哈希数组的位置:①计算hashcode ② 基于该hash值求出下标位置

HashMap:

将哈希表的大小固定为了2的幂,因为是取模得到索引值,故这样取模时,不需要做除法,只需要做位运算。位运算比除法的效率要高很多

 HashTable:

5、数据结构

HashMap:哈希数组+链表+红黑树点击知道啥是红黑树?

HashTable:哈希数组+链表

参考:https://www.cnblogs.com/qq455988971/p/8023502.html

posted @ 2020-04-02 12:03  恳小跃  阅读(128)  评论(0编辑  收藏  举报