【发布时间】:2021-06-24 07:23:49
【问题描述】:
Treemap 在内部使用红黑树来实现。 Treemap 以 Comparable 或 Comparator 作为参数,红黑树用于在二叉搜索树中插入数据。
从 java 8 开始,哈希映射开始使用红黑树,一旦达到三分之二的链接列表,以防哈希冲突。 我的问题是,对于自定义类,我实现了 equals() 和 hashcode(),但没有实现比较器,并使用这个自定义类作为 hashmap 中的键,那么在哈希冲突的情况下,如果没有比较器,红黑树将如何工作。
【问题讨论】:
-
你可能会读到this answer的第一点和第三点
-
@Holger 如果键不是 Comparable 并且当我们有哈希冲突时,它是否使用二分查找和线性查找的组合?对具有不同哈希码的键进行二进制搜索,并对具有相同哈希码的键使用线性搜索?
-
是的,这就是查找的工作方式。正如this Q&A 中所讨论的,它仍然会为这些键构建二叉树,但对于所有键具有相同哈希码且不可比较的子树,搜索必须遍历两个分支。
标签: java collections