HashMap and a Hashtable in Java 有什么区别?| Java Debug 笔记

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接

提问:HashMap and a Hashtable in Java 有什么区别?

HashMap and a Hashtable in Java 有什么区别?

哪种对非线程应用更有效?

高分回答:

HashMap and a Hashtable in Java有几个区别:

  1. Hashtable是同步的。这使得非线程应用程序更适合,因为未同步对象通常比同步对象(HashMapHashMap)执行更好。

  2. Hashtable是不允许 key 或 value 为 null 的,HashMap的 key 和 value 都可以为 null! 先解释一下 Hashtable不支持 null key 和 null value 的原理: 如果我们 put 了一个 value 为 null 进入 Map,Hashtable会直接抛空指针异常:

  3. HashMap 的子类之一是LinkedHashMap,因此,如果您想要可预测的迭代顺序(默认情况下是插入顺序),您可以轻松地将迭代顺序换成LinkedHashMap 。如果你使用Hashtable的话,这不会那么容易,需要遍历compare。

public class LinkedHashMap<K,V>
    extends HashMap<K,V>
    implements Map<K,V>
{
复制代码
  1. 如果需要支持线程安全与性能兼顾的话,建议使用ConcurrentHashMap

高分回答:

请注意,许多答案状态是哈希表同步的。实际上,这对你没什么用处。同步是在访问器/突变体方法将停止两个线程同时添加或从地图上删除,但在现实世界中,你经常需要额外的同步。

一个非常常见的成语是"检查然后放"——即在条目中查找一个条目,如果不存在则添加它。这绝不是一个原子操作,无论你使用或。MapHashtableHashMap

通过:HashMap

Collections.synchronizedMap(myMap);
复制代码

但要正确实现此逻辑,您需要对表单进行额外的同步:

synchronized(myMap) {
    if (!myMap.containsKey("tomato"))
        myMap.put("tomato", "red");
}
复制代码

即使对"条目(或通过)获得的条目进行复读也不安全,除非您也通过额外的同步来防止修改。

HashtableHashMapCollections.synchronizedMapMap
复制代码

并发Map接口(例如并发HashMap)的实现通过包括线程安全检查然后行动语义来解决其中的一些问题,例如:

ConcurrentMap.putIfAbsent(key, value);
复制代码

文章翻译自 *.com/questions/2…

真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话

求点赞???? 求关注❤️ 求分享???? 对8块腹肌的我来说真的 非常有用!!!

如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️

上一篇:HashMap和HashTable的区别


下一篇:redis基本类型对象编码