混洗与混洗映射的区别
线程安全性不同
HashMap通常比HashTable更高效,因为HashMap是线程安全的,并且不支持线程同步
扩展
在HashTable中,数组的默认大小为11,扩展方式为原始数组长度*2 1
在HashMap中,数组的默认大小为16,扩展大小为2倍
继承的父类不同
HashMap和Hashtable不仅是作者,父类也不同。
HashMap从AbstractMap类继承,HashTable从Dictionary类继承。
但是,都同时实现了map、Cloneable、Serializable三个接口
实现底层的区分
HashMap可以使用空值作为key,但Hashtable不允许空值作为key
HashMap支持空值作为key,但建议您尽量避免这种使用。 因为如果不小心使用的话,会发生问题,故障诊断会很麻烦
HashTable、HashMap和ConcurrentHashMap的区别
混洗地图
基数组链表的实现。 可以存储空键和空值,线程不安全
混装
基本数组链表的实现在key和value中都不能为null。 线程安全。 通过在修改数据时锁定整个HashTable,实现线程安全的方法效率低下。
ConcurrentHashMap
低层用分段的数组链表实现,是线程安全的
通过将整个映射划分为n个Segment,可以提供相同的线程安全,但效率为n倍,默认值为16倍。
ConcurrentHashMap比HashMap多一个类Segment,Segment可以重新锁定。
ConcurrentHashMap使用锁定段技术来确保线程安全。