HashMap与HashTable区别

HashMap和Hashtable的区别

两者都实现了Map接口,区别在于:线程安全,同步,速度

  • HashMap可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行)。

  • HashMap是非synchronized的,HashTable是synchronized的,HashTable是线程安全的,多个线程可以共享一个
    HashTable;如果没有正确同步,多个线程是不能共享HashMap的,java5提供了ConcurrentHashMap,它是
    HashTable的代替,比HashTable的扩展性更好

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

  • HashMap不能保证随着时间的推移Map中的元素次序是不变的。

要注意的一些重要术语:

1, sychronized意味着在一次仅有一个线程能够更改Hashtable。就是说任何线程要更新Hashtable时要首先获得同步锁,
其它线程要等到同步锁被释放之后才能再次获得同步锁更新Hashtable。

2, Fail-safe和iterator迭代器相关。如果某个集合对象创建了Iterator或者ListIterator,然后其它的线程试图“结构上”
更改集合对象,将会抛出ConcurrentModificationException异常。但其它线程可以通过set()方法更改集合对象是允许的,
因为这并没有从“结构上”更改集合。但是假如已经从结构上进行了更改,再调用set()方法,会抛出IllegalArgumentException异常。

3, 结构上的更改指的是删除或者插入一个元素,这样会影响到map的结构。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值