【问题标题】:What's the difference between Hashtable and Dictionary?哈希表和字典有什么区别?
【发布时间】:2012-04-03 21:59:33
【问题描述】:

DictionaryHashtable 之间有什么区别以及如何在 Java 中使用 Dictionary 类?

【问题讨论】:

标签: java dictionary collections hashtable


【解决方案1】:

DictionaryHashtable 的抽象基类。两者都仍在 JDK 中,以便与旧代码向后兼容。我们预计会使用HashMap 和Java 1.2 中引入的Map 接口的其他实现。

【讨论】:

  • 值得一提的是 Hashtable 是线程安全的,而 HashMap 不是。看我的回答。
  • Hashtable 已被改造以实现 Map。
【解决方案2】:

Dictionary 的 javadoc 有你的答案。

Dictionary 类是任何类的抽象父类,例如 Hashtable,它将键映射到值。

您不能直接使用Dictionary,因为它是一个abstract 类。

还要注意同一文档中的以下内容:

注意:此类已过时。新的实现应该实现Map 接口,而不是扩展这个类。

【讨论】:

    【解决方案3】:

    Dictionary 是一个抽象类,是Hashtable 的超类。 你不应该使用Dictionary,因为它是obsolete。 至于 Hashtable,它相对于其他映射(例如 HashMap)的优势在于线程安全,但是随着自 Java 1.5 以来 ConcurrentHashMap 的引入,没有真正的理由再使用它了 - 请参阅 javadoc

    从 Java 2 平台 v1.2 开始,该类被改进为实现 Map 接口,使其成为 Java 集合框架的成员。与新的集合实现不同,Hashtable 是同步的。如果不需要线程安全的实现,建议使用 HashMap 代替 Hashtable。如果需要线程安全的高并发实现,建议使用 ConcurrentHashMap 代替 Hashtable。

    总结:不要使用DictionaryHashtable,除非出于兼容性原因,请使用HashMap,如果你不需要线程安全,或者@如果您的地图在并发环境中使用,则为 987654330@。

    【讨论】:

      【解决方案4】:

      HashtableDictionary 的实现。你不能直接使用Dictionary,因为它是一个抽象类。

      但是您不应该使用它们,因为它们已被Map 接口和实现类所取代,其中HashMap 是最受欢迎的。

      【讨论】:

        【解决方案5】:

        我找到了一个关于 OOP 原理的讲座,其中包含您所寻求的答案:

        http://www.clear.rice.edu/comp202/04-fall/lectures/lec23/

        编辑:

        字典 计算中的一个主要主题是存储/检索/删除的主题:将数据存储在某个地方,以便以后可以检索并在不再需要时将其丢弃,所有这些都以最有效的方式进行。这些计算活动的抽象体现在所谓的字典的概念中,在 Java 中表示为如下接口。

        哈希表 哈希表是普通数组的泛化。 当实际存储的键数量相对于可能的键总数较小时,哈希表成为一种有效的 直接寻址数组的替代方法,因为哈希表 通常使用大小与键数成比例的数组 实际存储。 不是直接使用键作为数组索引,而是根据键计算数组索引。 通过散列,具有键 k 的元素存储在槽 h(k) 中;即,哈希函数 h 用于根据密钥 k 计算槽。 h 将 U 组键映射到哈希表 T[0..m-1] 的槽中: h:U -> {0, 1, ..., m - 1}

        【讨论】:

          【解决方案6】:

          Dictionary 类是任何类的抽象父类,例如 Hashtable,它将键映射到值。每个键和每个值都是一个对象。在任何一个 Dictionary 对象中,每个键最多与一个值相关联。给定一个字典和一个键,可以查找相关的元素。任何非空对象都可以用作键和值。

          【讨论】:

            【解决方案7】:

            根据字典的 javadocs:

            注意:此类已过时。新的实施应实施 Map 接口,而不是扩展这个类。

            Hashtable 也是 JDK 1.0 的经典版本。您应该更喜欢 Map 接口及其更现代的实现:HashMap 和 TreeMap。

            【讨论】:

              猜你喜欢
              • 2020-08-17
              • 1970-01-01
              • 2011-05-24
              • 2011-01-04
              • 2011-07-07
              • 2016-03-20
              • 2023-03-04
              • 2011-08-31
              • 2010-10-26
              相关资源
              最近更新 更多