gpt4 book ai didi

Java:AbstractSet 与 AbstractList 的 hashCode

转载 作者:行者123 更新时间:2023-12-01 08:14:14 26 4
gpt4 key购买 nike

对于 AbstractList,哈希码计算如下:

 int hashCode = 1;
Iterator<E> i = list.iterator();
while (i.hasNext()) {
E obj = i.next();
hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode());
}

而对于 AbstractSet,其计算方式如下:

int h = 0;
Iterator<E> i = iterator();
while (i.hasNext()) {
E obj = i.next();
if (obj != null)
h += obj.hashCode();
}

问题:为什么AbstractList的哈希码计算不能与AbstractSet的哈希码计算相同?这是否与 List 中可能的元素重复与 Set 中的唯一元素保证有关,或者与 ordered 相关>它们的无序属性?

最佳答案

绝对是的。 List 接口(interface)中指定的哈希码计算使得具有相同元素但以不同方式排序的两个列表的 hashCode() 可能会不同。 Set 接口(interface)中指定的哈希码保证两个具有相同元素但顺序不同的 Set 的哈希码相同。

这自然对应于 ListSet 的不同相等概念。

关于Java:AbstractSet 与 AbstractList 的 hashCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14778091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com