我正在经历 HashMap 实现并引用此链接:How does Java implement hash tables? 我发现“HashMap 包含一个存储桶数组以包含其条目”。所以,我有几个问题-
- 存储桶数组的类型是什么。
- 既然数组有缺点(例如固定大小和只允许同质数据)。那么为什么我们尽管有这些缺点仍然使用数组。
3.如果键的哈希码相同或发生冲突,它使用链表。它如何获取(搜索)第二个、第三个节点等的引用。
感谢提示。
最佳答案
- 存储桶数组的类型是什么。
这取决于你制作的 map ,如果你制作 HashMap<Integer, String>
那么桶将是这些类型,能够包含这些类型的对象
- 既然数组有缺点(例如固定大小和只允许同质数据)。那么为什么我们尽管有这些缺点仍然使用数组。
因为与性能提升相比,这些缺点是值得的。因为数组的大小是固定的,所以可以跳过很多检查(即这个索引是否存在?)。 您可以在这里阅读更多相关内容; https://en.wikiversity.org/wiki/Java_Collections_Overview和 Why 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/