- 继承的父类不同,HashMap继承的是AbstractMap类,而HashTable继承的是Dictionary 类;
- 初始容量和扩容量不同,HashMap初始容量为16个字节,扩容为原来的2倍,而 HashTable初始容量为11个字节,扩容增量为原来的2倍+1;
- HashMap允许K/V存在null值,但是HashTable不允许K/V为null;
- HashMap为线程不安全的,且不同步,在多线程并发过程中可能会产生死锁问题, 需要自己手动同步处理,而HashTable是线程安全的,在每个方法中都加了 synchronized同步锁,就相当于是加了同步锁的HashMap;
- 迭代器不同,两者都使用了Iterator,HashMap的Iterator是fail-fast迭代器,HashTable 还使用了Enumeration的方式,JDK8之前HashTable是没有fail-fas机制,在版本8之后 也是用的fail-fas;
- HashMap比HashTable效率高,当需要多线程操作时可以使用CurrentHashMap, CurrentHashMap是线程安全的,而且效率远高于HashTable,因为CurrentHashMap 采用了分段锁,并不对整段数据进行锁定;
- 添加K-V时的取Hash值算法不同,HashMap添加元素时使用的时自定义哈希算法, 而HashTable没用自定义哈希算法,直接采用的是Key的HashCode()方法;
HashMap,HashTable,CurrentHashMap区别
最新推荐文章于 2023-09-05 10:35:58 发布