hashmap和hashtable对比

HashMap和Hashtable的异同点网上也有很多的讨论,在我们的实际项目中,到底哪一个更加适合,需要自己动手去验证,在验证的过程中会发现别人的观点有时很难与自己的项目相结合,这里给出自己对这两个类的测试结果。

一 基本对比

Hashtable:任何非 null 对象都可以用作键或值,要求HashTable的键值对非null。Hashtable 是同步的,支持多线程。Hashtable是继承Dictionary,并实现Map接口,在官方API中明确表示Dictionary已过时,新的实现应该实现Map接口,而不是扩展此类。

HashMap:除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。要实现同步的HashMap,需要对其进行包装,如Collections.synchronizedMap(new HashMap(...))。HashMap的values()方法返回Collection,其迭代子操作时间开销和HashMap的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者加载因子设定过低。

 

基本认为Hashtable的性能不如HashMap,尤其是非多线程环境中。大多数开发者在多线程环境中也更宁愿采用HashMap产生同步Map进行实现。


-------------------------------------------------------------------------------

Hashtable和HashMap的区别:
1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;
2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:
Map Collections.synchronizedMap(Map m)
这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
3.在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zlingh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值