【Java集合】HashMap和Hashtable

HashMap

public class HashMap<K,V> extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable 
  • 非线程安全,HashMap可以通过下面的语句进行同步: Map m = Collections.synchronizeMap(hashMap)
  • 键值对均能为null
  • 迭代器Iterator,支持fast-fail
  • 默认容量是16,装载因子是 0.75f
  • 多次访问,映射元素的顺序可能不同(可能不变或者下标变为原来的二倍)
  • 检测是否含有key时,HashMap内部需要将key的hash码重新计算一边再检测(跟容量有关系)

fast-fail
程序在对 collection 进行迭代时,某个线程对该 collection 在结构上对其做了修改(删除或者添加元素),这时迭代器就会抛出 ConcurrentModificationException 异常信息,从而产生 fail-fast

Hashtable

public class Hashtable<K,V>
    extends Dictionary<K,V>
    implements Map<K,V>, Cloneable, java.io.Serializable
  • 线程安全
  • 键值对均不能为null
  • 迭代器Iterator,支持fast-fail; Enumeration ,不支持fast-fail
  • 默认容量是11,装载因子是 0.75f
  • 多次访问,映射元素的顺序相同
  • hash算法 ,Hashtable则直接利用key本身的hash码来做验证

HashMap和Hashtable的主要区别

  • 线程安全性,同步(synchronization)
  • 速度

建议

由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。

Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。

参考

参考1

参考2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值