HashSet和HashMap如何在Java中工作?

fgo*_*lez 4 java hashmap hashset

我对内部实现的有点糊涂了HashSet,并HashMap在Java中.

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

无论是HashSetHashMap允许重复的元素.

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

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

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

Era*_*ran 9

你的行为是正确的HashMap,但是你的执行是错误的HashSet.

HashSetHashMap内部支持,但您添加到其中的元素HashSet用作支持中的键HashMap.对于该值,使用虚拟值.因此,HashSetcontains(element)只是调用后盾HashMapcontainsKey(element).