当前位置: 首页 > 知识库问答 >
问题:

HashSet和HashMap如何在Java中工作?

甄阿苏
2023-03-14

我对Java中HashSetHashMap的内部实现有点困惑。

这是我的理解,所以如果我错了,请纠正我:

< code>HashSet或< code>HashMap都不允许重复的元素。

< code>HashSet由< code>HashMap支持,所以在< code>HashSet中,当我们调用< code >时。add(element),我们在元素上调用< code>hashCode()方法,并在内部对内部< code>HashMap执行< code>put(k,v),其中键是< code>hashCode,值是实际的对象。因此,如果我们尝试将相同的对象添加到< code>Set中,它将看到< code>hashCode已经存在,然后用新值替换旧值。

但是,当我读到HashMap在HashMap中将我们自己的对象作为键存储时,HashMap是如何工作的,这对我来说似乎不一致。在这种情况下,我们必须覆盖 hashCode() 和 equals() 方法并使它们彼此一致,因为,如果我们找到具有相同 hashCode 的键,它们将转到同一个存储桶,然后为了区分具有相同 hashCode 的所有条目,我们必须遍历条目列表以在每个键上调用方法 equals() 并找到匹配项。因此,在这种情况下,我们允许具有相同的哈希代码,并且我们创建一个存储桶,其中包含具有相同哈希代码的所有对象的列表,但是使用 HashSet,如果我们已经找到一个哈希代码,我们将旧值替换为新值。

我有点困惑,有人能给我解释一下吗?

共有3个答案

欧阳英彦
2023-03-14

哈希映射:-基本上哈希映射作为键和值工作,如果我们想将数据存储为键值对,那么我们将转到哈希映射,基本上当我们使用哈希映射插入数据时,基本上内部它会遵循 3 思考,1.哈希码 2..等于 3.==

当我们在哈希映射中插入数据时,它会使用哈希码将数据存储在桶中(快速输入),如果在同一个bocket中有2个数据存储,那么就会发生键冲突来解决这个键冲突,我们使用(==)方法,总是==方法检查对象的引用,如果两个对象的哈希码相同,那么第一个替换为第二个,如果哈希码不相同,那么哈希冲突就会发生,解决这个哈希冲突,我们将使用(。检查内容是否相同?如果内容相同,则第一个替换为第二个,如果两个内容不同,它将在bocket中创建另一个对象并存储数据

谷梁嘉悦
2023-03-14

我们在HashMap中插入的值充当map对象的键,对于其值,java使用常量变量。因此,在键值对中,所有键都具有相同的值。

你可以参考这个链接https://www.geeksforgeeks.org/hashset-in-java/

杜焕
2023-03-14

关于< code>HashMap的行为,您是正确的,但是关于< code>HashSet的实现,您是错误的。

HashSet在内部由HashMap支持,但您添加到HashSet的元素用作后备HashMap中的键。对于该值,使用了虚拟值。因此HashSet包含(元素)只是调用后备HashMap包含键(元素)

 类似资料:
  • 问题内容: 我了解这是基于实现的,但是在您需要唯一的元素集时使用。那么,为什么在下一个代码中将相同的对象放入地图并进行设置时,两个集合的大小都等于1?地图大小不应该为2吗?因为如果两个集合的大小相等,那么使用这两个集合不会有任何区别。 输出为1和1。 问题答案: 该地图拥有唯一键。当您使用映射中存在的键进行调用时,该键下的对象将被新对象替换。因此大小为1。 两者之间的区别应该很明显: 在您存储键值

  • 如果Equals方法返回false,即返回false。所以这些值应该相加两次,但只相加一次。谁能解释一下。我在谷歌上搜索并清除了关于HashCode和equals contract的概念,但在这里我失败了。

  • 本文向大家介绍HashMap 和 HashSet区别?相关面试题,主要包含被问及HashMap 和 HashSet区别?时的应答技巧和注意事项,需要的朋友参考一下 如果你看过 `HashSet` 源码的话就应该知道: HashSet 底层就是基于 HashMap 实现的。(HashSet 的源码非常非常少,因为除了 `clone() `、`writeObject()`、`readObject()`

  • 问题内容: 我只知道LinkedHashSet插入时不允许重复的元素。但是,我不了解Hashset在Hava中如何工作?我知道哈希表中使用了哈希表,因此哈希表用于存储元素,这里也不允许重复的元素。然后,Treeset也类似于Hashset,它也不允许重复的条目,因此将看到唯一的元素,并且遵循升序。 关于HashMap,我还有一个疑问- Hashmap不维护顺序。它可能具有一个null键和多个nul

  • 本文向大家介绍Java中的HashMap和HashSet之间的区别。,包括了Java中的HashMap和HashSet之间的区别。的使用技巧和注意事项,需要的朋友参考一下 HashMap和HashSet都是Java Collection框架最重要的类之一。 以下是HashMap和HashSet之间的重要区别。 序号 键 哈希映射 哈希集 1 实作 Hashmap是Map接口的实现。 另一方面,哈希

  • 下面是我试过的那段代码;也给出了输出。 我的问题是:我在