我有下面的类,只有等于被覆盖,
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();
}*/
}
我将这个类对象添加到哈希映射中,如下所示
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,因为相同的等号键被置为s3?
答案 0 :(得分:4)
您也必须覆盖tar -zcvPf /root/"$MYMODIFYDIR"_"$MYMODIFYFILENAME".tar.gz "$file"
。如果hashCode
,a.equals(b)
必须等于a.hashCode()
。 b.hashCode()
的实现确定了条目将存储在哪个桶中。如果您不覆盖hashCode
,则可能有两个相同的密钥存储在两个不同的存储桶中。
将此添加到您的hashCode
课程:
S
答案 1 :(得分:1)
您描述的情况违反了合同。如果您以违反equals()
合同的方式覆盖hashCode(),
,则必须覆盖hashCode()
。