HashSet和HashMap如何在Java中工作?

时间:2015-04-05 14:48:20

标签: java hashmap hashset

我对java中HashSetHashMap的内部实现感到有点困惑。

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

HashSetHashMap都不允许重复元素。

HashSetHashMap支持,因此在HashSet调用.add(element)时,我们在元素上调用hashCode()方法并在内部调用对内部put(k,v)执行HashMap,其中键为hashCode,值为实际对象。因此,如果我们尝试将同一个对象添加到Set,它会看到hashCode已经存在,然后用新值替换旧值。

但是,当我在HashMap中将我们自己的对象存储为密钥时,{I} HashMap如何工作时,这似乎与我不一致。 在这种情况下,我们必须覆盖hashCode()equals()方法并使它们在彼此之间保持一致,因为如果我们找到具有相同hashCode的密钥,它们将转到同一个存储桶,然后要区分具有相同hashCode的所有条目,我们必须迭代条目列表以在每个键上调用方法equals()并找到匹配项。 所以在这种情况下,我们允许具有相同的hashCode,并且我们创建一个包含所有具有相同hashCode的对象的列表的存储桶,但是如果我们已经找到,则使用HashSet hashCode,我们用新值替换旧值。

我有点困惑,有人可以向我澄清一下吗?

4 个答案:

答案 0 :(得分:8)

您对HashMap的行为是正确的,但您对HashSet的实施是错误的。

HashSet在内部由HashMap支持,但您添加到HashSet的元素将用作支持HashMap中的关键字。对于该值,使用虚拟值。因此,HashSet contains(element)只会调用支持HashMap containsKey(element)

答案 1 :(得分:0)

我们在HashMap中插入的值充当地图对象的键,并且对于其值,java在键中使用常量变量 .So-值对,所有将具有相同值

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

答案 2 :(得分:0)

哈希图:-基本上哈希图作为键和值工作,如果我们想将数据存储为键和值对,那么我们将进入哈希图,基本上,当我们基本上在内部使用哈希图插入数据时,它将遵循3想 1.哈希码 2.等号 3。==

当我们在哈希图中插入数据时,它将使用哈希码将数据存储在存储桶中(快入),如果在同一存储桶中有2个数据存储,则会发生键冲突要解决此键冲突,我们使用(==)方法,始终==方法检查对象的引用,如果两个对象的哈希码相同,则将第一个替换为第二个,如果哈希码不相同,则哈希碰撞将碰巧解决此哈希冲突,我们将使用(.equal)方法.equal方法基本上将检查内容,如果两个内容相同,则将返回true,否则将返回false,因此在哈希图中会检查内容是否相同?如果内容相同,则第一个替换为第二个,如果两个内容都不相同,它将在框内创建另一个对象并存储数据

答案 3 :(得分:0)

哈希集:-基本上,哈希集用于一次存储一堆对象,内部哈希集也仅使用哈希映射,当我们在内部使用add方法插入某种想法时,它将调用put方法并将其存储在hashmap key bcz hash map key始终是唯一和重复的,这是不允许hashset也是唯一和重复的方式,如果我们也在hashst中输入重复,则第一个将不会出现任何异常,它将替换为第二个,并且值它将存储常量数据“ PRESENT”。

您可以看到内部哈希图对象包含哈希集元素作为键,并包含常量“ PRESENT”作为其值。 存在的地方是常数,定义为 私有静态最终对象存在= new Object()