HashMap和Hashtable的区别

在牛客上刷题还有面试遇到就稍微记下:

1.继承上不同:HashMap继承AbstractMap,而HashTable继承Dictionary

HashMap源码:

public class HashMap<K,V> extends AbstractMap<K, V>
 implements Map<K,V>, Cloneable,Serializable...

Hashtable源码:

public class Hashtable<K,V>
    extends Dictionary<K,V>
    implements Map<K,V>, Cloneable, java.io.Serializable{
}

2.执行效率不同:以下是方法的源码

HashMap的put方法源码:

public V put(K key,V value)//没有同步

Hashtable的put方法源码:

public synchronized V put(K key,V value)//当然,Hashtable的其它方法,如get,size,remove等
//都加了synchronized关键字同步操作

3.关于key和value是否等于null问题

HashMap的put方法源码中有如下代码块:

if(key == null)
return putForNullKey(value);//调用某个方法直接把key为null,值为value的键值对插入进去。

Hashtable的put方法源码中有如下代码块:

if(value == null)
{
    throw new NullPointerException();
}
//如果value为null会空抛异常

4.有无contains方法

HashMap的方法源码:

public boolean containsKey(Object Key)...//
public boolean containsValue(Object value)...//
//注意,没有contains方法

Hashtable的方法源码:

public synchronized boolean contains(Object value)...//
public synchronized boolean containsKey(Object Key)...//
public synchronized boolean containsValue(Object value)...//

总结:

1.都实现了Map接口。

2.HashMap实现非同步,线程不安全;Hashtable实现同步,线程安全。

3.HashMap没有contains方法,而Hashtable有contains方法。

4.HashMap允许键值对为null(注意:键唯一,值可以多个为null,所以用containsKey()方法判断键,因为get()返回null,既可以表示HashMap没有该键,也可以表示该HashMap的键为null),而Hashtable不允许

5.两个遍历的方式的内部实现不同,HashMap,Hashtable都用了iterator,但Hashtable还用了Enumeration

有毛病请指出,谢谢,后续再更新。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值