HashMap与HashTable学习笔记

一、概述:
 

 1、Hashtable和Hashmap是我们在开发过程中经常用来映射key到value的容器。
 2、Hashtable和Hashmap实现的功能基本相同,核心都是散列表的实现,因而查找、插入、删除效率高,时间复杂度平均能达到O(1)。


二、两者的不同之处:

1、它们的继承关系有所不同。

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


 Hashtable是基于陈旧的Dictionary类的。HashMap是Map接口的一个实现,继承于较新的AbstractMap类。Hashmap可以算作是Hashtable的升级版本,整体上Hashmap对Hashtable类优化了代码。HashMap去掉了contains方法,保留了containsKey和containsValue方法。

2、值的作用域不同。

 在HashMap中,null可以作为key,这样的key只有一个,可以有一个或多个key所对应的value为null。

 而在Hashtable中,null不可以作为key,也不可以作为value。否则会抛出空指针异常。

  ps:注意一个问题,因为HashMap可以存入null。所以当get()方法返回null值时,既可以表示HashMap中没有该key,也可以表示该key所对应的value为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个key, 而应该用containsKey()方法来判断。

3、同步与异步。

  Hashtable的方法是同步的,即Hashtable线程安全。不用采取任何特殊的行为就可以在一个多线程的应用程序中用一个Hashtable。

  HashMap的方法是异步的,即HashMap线程不安全。所以说:HashMap是Hashtable的轻量级实现(非线程安全的实现)

  ps1:这两者的不同是通过在读写方法上加synchronized关键字来实现的Hashtable的源代码中,在需要线程安全的方法前都加上了synchronized关键字。所以可以认为HashMap的效率要比table的效率略高一点。

  ps2:当既要同步又要可以让null作为键或者值的时候,一个简便的方法就是利用Collections类的静态的synchronizedMap()方法,
      Map synMap = Collections.synchronizedMap(map);
     它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值