HashMap 与 Hashtable的区别

HashMap和HashTable都实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆,实现Map接口。

HashMap的父类AbstractMap类。
Hashtable的父类Dictionary。

Hashtable既不支持Null key也不支持Null value。都会抛空指针。
HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。

Hashtable是线程安全的,它的每个方法中都加入了Synchronize方法。
HashMap不是线程安全的。

Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。
HashMap默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。

计算hash值的方法不同,Hashtable直接使用对象的hashCode。
计算hash值的方法不同,HashMap为了提高计算效率,将哈希表的大小固定为了2的幂,这样在取模预算时,不需要做除法,只需要做位运算。位运算比除法的效率要高很多。

HashMap 与 concurrentHashMap

hashMap线程不安全,concurrentHashMap线程是安全的,hashTable线程安全的
HashMap的线程不安全主要体现在下面两个方面:
   1.在JDK1.7中 数组 + 链表,当并发执行扩容操作时会造成环形链和数据丢失的情况。
   2.在JDK1.8中 数组 + 链表\红黑树,在并发执行put操作时会发生数据覆盖的情况。 

上一篇:Java XML转JSON


下一篇:Java后端进行经纬度点抽稀聚合,HTML呈现及前端聚合实现点聚合~