开发者社区 问答 正文

HashMap 和 Hashtable 有什么区别?

HashMap 和 Hashtable 有什么区别?

展开
收起
问问小秘 2020-01-03 13:31:36 649 分享 版权
来自: Java开发者
1 条回答
写回答
取消 提交回答
  • 主要区别线程安全性、同步性、速度

    线程安全性:HashTable是线程安全的,HashMap是线程不安全的

    HashTable实现线程安全的方式是修改数据时      锁住整个HashTable,效率低,ConcurrentHashMap做了相关优化。

    HashTable底层数组+链表实现,无论key还是value都不能为null,初始size = 11,扩容:newsie

    = oldsize*2+1

    HashMap可以存储null建和null值,线程不安全,初始size为16,扩容newsize = oldSIze*2,size为2的n次幂

    同步:Hashtable是线程安全的,它的方法是同步的,可以直接用在多线程环境中。而HashMap则不是线程安全的,在多线程环境中,需要手动实现同步机制。

    HashMap可以通过下面的语句进行同步: Map m = Collections.synchronizeMap(hashMap);

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

    2020-01-03 13:32:04
    赞同 展开评论