HashMap和HashTable的区别

HashMap

基于哈希表实现,元素是key-value对,通过单链表解决冲突问题

非线程安全,多线程环境下使用concurrentHashMap

支持序列化、克隆

key和value都允许为null

扩容条件:当size大于threshold,threshold=容量*加载因子,默认加载因子0.75

默认容量16

HashTable

基于哈希表实现,元素是key-value对,通过单链表解决冲突问题

线程安全

支持序列化、克隆

默认容量11

区别

HashTable继承自Dictionary类,而HashMap继承自AbstractMap类,二者都实现了Map接口

HashMap有containsValue、containsKey方法,HashTable保留了contains方法,其中contains和containsValue功能相同

HashMap中key和value都允许为null,Hashtable中key和value都不允许出现null值

在Hashtable中如果有类似put(null,null)的操作,编译同样可以通过,因为key和value都是Object类型,但运行时会抛出NullPointerException异常

在HashMap中不能由get()方法来判断HashMap中是否存在某个键,应该用containsKey()方法来判断

HashTable默认容量11,old*2+1扩容,HashMap默认容量16,2倍扩容

浙ICP备11005866号-12