gpt4 book ai didi

java - 将对象添加到 hashmap 作为键,仅等于实现的方法

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

我有以下仅等于被覆盖的类,

class S {

String txt = null;

S(String i) {
txt = i;
}

public boolean equals(Object o) {
S cc = (S) o;
if (this.txt.equals(cc.txt)) {
return true;
} else {
return false;
}
}

//Default hash code will be called
/*public int hashCode(){
return txt.hashCode();
}*/

}

我将此类对象添加到 HashMap 中,如下所示,

    public static void main(String args[]) {
S s1 = new S("a");
S s2 = new S("b");
S s3 = new S("a");

Map m = new HashMap();
m.put(s1, "v11");
m.put(s2, "v22");
m.put(s3, "v33");

System.out.println(m.size());
System.out.println(m.get(s1));
}

能解释一下结果3和v11是打印出来的吗? s1 的值 v11 是否应该被 v33 替换,因为相同的 equals 键被放入 s3 中?

最佳答案

您还必须覆盖hashCode。如果a.equals(b),则a.hashCode()必须等于b.hashCode()hashCode 的实现决定了条目将存储在哪个存储桶中。如果您不覆盖 hashCode,您可能会将两个相同的 key 存储在两个不同的存储桶中。

将其添加到您的 S 类中:

@Override
public int hashCode() {
if (txt == null)
return 0;
return txt.hashCode();
}

关于java - 将对象添加到 hashmap 作为键,仅等于实现的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30234345/

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