fgo*_*lez 4 java hashmap hashset
我对内部实现的有点糊涂了HashSet,并HashMap在Java中.
这是我的理解,所以如果我错了请纠正我:
无论是HashSet或HashMap允许重复的元素.
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,我们用新值替换旧值.
我有点困惑,有人可以向我澄清一下吗?
你的行为是正确的HashMap,但是你的执行是错误的HashSet.
HashSet由HashMap内部支持,但您添加到其中的元素HashSet用作支持中的键HashMap.对于该值,使用虚拟值.因此,HashSet的contains(element)只是调用后盾HashMap的containsKey(element).
| 归档时间: |
|
| 查看次数: |
802 次 |
| 最近记录: |