【问题标题】:Order of operation in HashSet's method add()HashSet 方法 add() 中的操作顺序
【发布时间】:2017-10-08 16:23:23
【问题描述】:

当涉及到HashSet的方法add时,我遇到了一些问题。即使在阅读了它的源代码here 之后,我也不太明白发生了什么。

该方法究竟做了什么?就调用 hashCode 和 equals 而言,它采取的操作顺序是什么?

【问题讨论】:

    标签: java hash hashset


    【解决方案1】:

    HashSet 只是一个HashMap,其中的值是一个Object
    所以add 只是将元素添加到支持的哈希图中。将元素添加到 hashmap 意味着使用 hashCode 来确定应该放置它的位置。 equals 用于确定我们尝试添加的键是否已经存在,然后应该更新值

    【讨论】:

    • “其中值为布尔值” - 错误
    • 所以,假设我们试图添加到 HashSet 的 Object 具有某个 HashCode。但是,该 HashCode 已经有一个值“存储”。如果我们尝试添加的新对象不等于(就 equals() 方法而言)之前“分桶”的对象被我们尝试添加的对象替换?
    • @Tom:哇!我 100% 确定它是 Boolean 而不是 Object。为什么我会有这种印象??
    • @PedroRibeiro:如果它们不相等且具有相同的哈希,则将其添加到属于该存储桶的列表中。您应该阅读有关内部结构的信息。它是每个桶的链表
    猜你喜欢
    • 2019-11-22
    • 1970-01-01
    • 2013-01-08
    • 2022-12-11
    • 2019-08-01
    • 2011-02-11
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多