【问题标题】:Internal implementation of data structures in java?java中数据结构的内部实现?
【发布时间】:2011-05-26 16:29:45
【问题描述】:

有没有可以找到Java中各种数据结构(HashMaps,TreeSets等)的详细实现信息的来源。 例如:不同类型使用的散列函数是什么?是开放寻址还是别的什么?类似的东西。
PS:我知道我可以通过源代码。但那我改天离开:)

【问题讨论】:

  • 来源详细的实现细节。您认为这会比这更好吗?
  • 您尝试过 wikipedia.org 吗?我听说这是一个很好的资源。
  • 您在寻找什么级别的详细信息?我唯一能告诉你的是,归根结底,一切都是一个数组。
  • @Woot4Moo 如果LinkedList 用数组实现就不好了。
  • @Kartik - 如果您想了解替代方案的优缺点,那么您需要一本好的数据结构书(也许同时还要阅读代码)。

标签: java data-structures hashmap


【解决方案1】:

由于 Java 是开源的,因此实现本身是最好看的。

如果您使用 Eclipse 并已配置源代码,只需 ctrl+左键单击所需的数据结构声明。 tt 将为此开源。

API 文档没有提供实现细节。

【讨论】:

    【解决方案2】:

    Javadoc 开始,然后在需要时继续访问源代码!

    【讨论】:

      【解决方案3】:

      不知你是什么级别的细节?

      我可以告诉你什么对我来说是足够的。我总是从 NetBeans 获得它。在那里,我可以按住 CTRL,单击任何类名,它会将我带到它的代码。这样一来,您就可以将文档和代码放在您面前的一个地方,并且您可以看到它们是如何实现的,以及它们在文档中的描述。

      希望对你有帮助。

      编辑:

      HashMap 中的第 247 行,在 HashSet 中创建然后在其中使用,描述了一个哈希函数,也许这就是你想要的?

      /**
           * Applies a supplemental hash function to a given hashCode, which
           * defends against poor quality hash functions.  This is critical
           * because HashMap uses power-of-two length hash tables, that
           * otherwise encounter collisions for hashCodes that do not differ
           * in lower bits. Note: Null keys always map to hash 0, thus index 0.
           */
          static int hash(int h) {
              // This function ensures that hashCodes that differ only by
              // constant multiples at each bit position have a bounded
              // number of collisions (approximately 8 at default load factor).
              h ^= (h >>> 20) ^ (h >>> 12);
              return h ^ (h >>> 7) ^ (h >>> 4);
          }
      

      【讨论】:

      • 类似于 HashSet 的哈希函数。
      • @Kartik Rustagi 检查编辑,也许这已经足够详细了,我希望。
      【解决方案4】:

      【讨论】:

        【解决方案5】:

        没有。 API 文档定义了集合类的外部行为,但没有定义实现细节,这可能是特定于供应商的。如果您想知道这些类是如何在特定 VM 中实现的,您别无选择,只能查看源代码。

        至少 AFAIK,没有 Java API 的实现以及此类特定细节的附加文档。

        【讨论】:

          猜你喜欢
          • 2023-03-15
          • 1970-01-01
          • 1970-01-01
          • 2014-04-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-16
          相关资源
          最近更新 更多