java - 查询HashMap内部实现

标签 java hashmap hashtable

我正在经历 HashMap 实现并引用此链接:How does Java implement hash tables? 我发现“HashMap 包含一个存储桶数组以包含其条目”。所以,我有几个问题-

  1. 存储桶数组的类型是什么。
  2. 既然数组有缺点(例如固定大小和只允许同质数据)。那么为什么我们尽管有这些缺点仍然使用数组。

3.如果键的哈希码相同或发生冲突,它使用链表。它如何获取(搜索)第二个、第三个节点等的引用。

感谢提示。

最佳答案

  1. 存储桶数组的类型是什么。

这取决于你制作的 map ,如果你制作 HashMap<Integer, String>那么桶将是这些类型,能够包含这些类型的对象

  • 既然数组有缺点(例如固定大小和只允许同质数据)。那么为什么我们尽管有这些缺点仍然使用数组。
  • 因为与性能提升相比,这些缺点是值得的。因为数组的大小是固定的,所以可以跳过很多检查(即这个索引是否存在?)。 您可以在这里阅读更多相关内容; https://en.wikiversity.org/wiki/Java_Collections_OverviewWhy not always use ArrayLists in Java, instead of plain ol' arrays?

  • 如果键的哈希码相同或发生冲突,它会使用链表。它如何获取(搜索)第二个、第三个节点等的引用。
  • 这里的解释比我能解释的更好; What happens when a duplicate key is put into a HashMap?

    关于java - 查询HashMap内部实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53865852/

    相关文章:

    java - 如何在 Android appium 中水平滑动

    java - 如何调用枚举函数?

    regex - 在 Powershell Regeg -match 之后从 $matches 哈希表中提取数据

    java - 生成代表最小 pow() 结果的一系列数字

    java - 为什么 hadoop 不能识别我的 Map 类?

    java - 如何获取 JComboBox 项目的屏幕坐标

    java - HashMap 中的 keySet() 方法可能更简洁

    java - 将 HashMap 与对象进行比较

    程序的其余部分是否可以访问局部变量,或者是否可以在不使用 malloc 的情况下加载哈希表

    multithreading - 引用计数资源的线程安全映射