【问题标题】:Red black tree implementation in Hashmap of java 8 without comparator没有比较器的java 8的Hashmap中的红黑树实现
【发布时间】:2021-06-24 07:23:49
【问题描述】:

Treemap 在内部使用红黑树来实现。 Treemap 以 Comparable 或 Comparator 作为参数,红黑树用于在二叉搜索树中插入数据。

从 java 8 开始,哈希映射开始使用红黑树,一旦达到三分之二的链接列表,以防哈希冲突。 我的问题是,对于自定义类,我实现了 equals() 和 hashcode(),但没有实现比较器,并使用这个自定义类作为 hashmap 中的键,那么在哈希冲突的情况下,如果没有比较器,红黑树将如何工作。

【问题讨论】:

  • 你可能会读到this answer的第一点和第三点
  • @Holger 如果键不是 Comparable 并且当我们有哈希冲突时,它是否使用二分查找和线性查找的组合?对具有不同哈希码的键进行二进制搜索,并对具有相同哈希码的键使用线性搜索?
  • 是的,这就是查找的工作方式。正如this Q&A 中所讨论的,它仍然会为这些键构建二叉树,但对于所有键具有相同哈希码且不可比较的子树,搜索必须遍历两个分支。

标签: java collections


【解决方案1】:

总结我对这个问题的其他观众的理解:

  1. 如果有bucket冲突(不一定是hashcode冲突),那么二叉树进来,搜索hashcode
  2. 如果哈希码相同,那么它将依赖于哈希映射键的可比实现。
  3. 如果 key 没有实现可比较,则在这种情况下将遍历树的两个(左和右)分支。

【讨论】:

    猜你喜欢
    • 2012-08-20
    • 2015-03-06
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 2014-02-15
    • 2012-12-24
    • 2021-06-27
    相关资源
    最近更新 更多