【问题标题】:What is the role played by hashCode() in a HashSet or HashMap [duplicate]hashCode() 在 HashSet 或 HashMap 中扮演什么角色 [重复]
【发布时间】:2023-03-20 01:54:01
【问题描述】:

this 问题的最高投票答案是:

当使用基于散列的集合或映射(例如 HashSet、LinkedHashSet、HashMap、Hashtable 或 WeakHashMap)时,请确保您放入集合中的关键对象的 hashCode() 在对象位于收藏。确保这一点的万无一失的方法是使您的密钥不可变,这还有其他好处。

老实说,我不明白hashCode() 对HashSet 或HashMap 集合对象所起的作用。

hashCode() 的关键对象方法如何在基于哈希的集合中使用? hashCode() 的对象在其生命周期中发生变化的情况可能是什么? 有人可以通过一些例子进一步详细说明这方面吗?

【问题讨论】:

  • 不清楚您对“对象的 hashCode() 可能在其生命周期内发生变化的情况有什么问题?”正在尝试询问,但是如果您对对象进行变异,使得它们的哈希码在它们被用作哈希表中的键后发生变化,您将无法再次查找这些键...
  • 基本上......这很复杂。您可以查看 Java 专家时事通讯 (javaspecialists.eu/archive/Issue235.html) 的最新一期,了解幕后需要什么。
  • 作为对象在其生命周期中更改其哈希值的示例,请查看基于其内容的哈希值的众多集合。

标签: java hashmap hashtable hashcode


【解决方案1】:

正如这篇博文中非常清楚地说明的那样,讨论:HashMap 在 Java 中的工作原理

Java 中的HashMap 基于散列原理工作。它是一种数据结构,如果我们知道密钥,它允许我们在恒定时间 O(1) 内存储和检索对象。在散列中,散列函数用于链接 HashMap 中的键和值。对象通过调用 HashMap 的 put(key, value) 方法存储,通过调用 get(key) 方法检索。当我们调用 put 方法时,会调用 key 对象的 hashcode() 方法,以便 map 的 hash 函数可以找到存储 value 对象的桶位置,这实际上是内部数组的索引,称为表。

阅读更多:http://javarevisited.blogspot.com/2011/02/how-hashmap-works-in-java.html#ixzz42bvBzm6Y

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多