HashMap和HashTable的区别(简单版)

1.两者父类不同 hashtable父类是Dictionary,hashmap的父类是AbstractMap 但是两者都实现了三个相同接口,分别是map、Cloneable(可复制)、Serializable(可序列化)

2.安全性 hashmap是线程不安全的,在多线程环境下需要去处理线程不安全问题 hashtable 是线程安全的,它的方法上都有synchronized 修饰(悲观锁) 线程安全自然效率就低,鱼与熊掌不可兼得,hashmap线程不安全自然效率会很高. 当在多线程环境下时推荐使用ConcurrentHashMap,它的效率比hashtable高好多倍.因为ConcurrentHashMap使用了分段锁.并不对整个数据进行锁定 3.初始容量和每次扩容大小不同 当容量不足时,就会进行扩容,hashmap初始容量是16,每次达到容量0.75(负载因子)就进行扩容,每次扩容是原始容量2 hashtable每次扩容是 原始容量*2+1,初始容量为11 4.计算hash值的方法不同 HashMap重新计算了key的Hash值,而HashTable直接使用了key的HashCode()。 5.对null的支持不同 hashtable: key和value都不能为null hashmap key可以为null,但是只能有唯一一个,value可以有多个为null 6.是否保留了contains方法 HashMap不提供Contains方法,但是有containsValue和ContainsKey方法;

而HashTable既有Contains方法也有containsValue和ContainsKey方法。其中Contains和containsValue功能相同

经验分享 程序员 微信小程序 职场和发展