如果 hashCode() 和 equals() return 相同的值,UserDefined class 如何成为 hashmap 的键
How can UserDefined class be a key of hashmap if hashCode() & equals() return same value
我正在尝试使用 UserDefined class 作为 Key 来实现 HashMap,即使我实现了 hashCode()(returns 每个对象都为 0)和 equals()(returns false 对于每个对象)。我的代码
public class UserDefinedMapKey {
public static void main(String[] args) {
HashMap<Beck, Integer> hm = new HashMap<Beck, Integer>();
hm.put(new Beck(10,"archit"), 20);
hm.put(new Beck(10,"archit"), 30);
hm.put(new Beck(30,"goel"), 50);
for(Map.Entry<Beck, Integer> m : hm.entrySet()) {
System.out.println(m.getKey() + "===" + m.getValue());
}
}
}`
`
class Beck {
int arc;
String grc;
public Beck(int i, String string) {
// TODO Auto-generated constructor stub
}
public int getArc() {
return arc;
}
public void setArc(int arc) {
this.arc = arc;
}
public String getGrc() {
return grc;
}
public void setGrc(String grc) {
this.grc = grc;
}
@Override
public int hashCode() {
return 0;
}
@Override
public boolean equals(Object b) {
return false;
}
}
输出:-
main.java.Interview.Beck@0===20
main.java.Interview.Beck@0===30
main.java.Interview.Beck@0===50
任何人都可以告诉我它是如何工作的原因
发生这种情况是因为 equals
返回 false。 equals
/hashCode
契约完全被打破。没有断言如果两个对象相同,则它们是相等的。两个对象可以具有相同的哈希码,但仍然不相等。
发生的是在第二次和第三次 put 调用中,检查给定桶(由 hashCode
定义)中的任何对象是否相同。他们不是因为equals
returnsfalse
,所以新对象被添加到同一个桶中。
您需要正确执行合约才能正常工作。
我正在尝试使用 UserDefined class 作为 Key 来实现 HashMap,即使我实现了 hashCode()(returns 每个对象都为 0)和 equals()(returns false 对于每个对象)。我的代码
public class UserDefinedMapKey {
public static void main(String[] args) {
HashMap<Beck, Integer> hm = new HashMap<Beck, Integer>();
hm.put(new Beck(10,"archit"), 20);
hm.put(new Beck(10,"archit"), 30);
hm.put(new Beck(30,"goel"), 50);
for(Map.Entry<Beck, Integer> m : hm.entrySet()) {
System.out.println(m.getKey() + "===" + m.getValue());
}
}
}`
`
class Beck {
int arc;
String grc;
public Beck(int i, String string) {
// TODO Auto-generated constructor stub
}
public int getArc() {
return arc;
}
public void setArc(int arc) {
this.arc = arc;
}
public String getGrc() {
return grc;
}
public void setGrc(String grc) {
this.grc = grc;
}
@Override
public int hashCode() {
return 0;
}
@Override
public boolean equals(Object b) {
return false;
}
}
输出:-
main.java.Interview.Beck@0===20
main.java.Interview.Beck@0===30
main.java.Interview.Beck@0===50
任何人都可以告诉我它是如何工作的原因
发生这种情况是因为 equals
返回 false。 equals
/hashCode
契约完全被打破。没有断言如果两个对象相同,则它们是相等的。两个对象可以具有相同的哈希码,但仍然不相等。
发生的是在第二次和第三次 put 调用中,检查给定桶(由 hashCode
定义)中的任何对象是否相同。他们不是因为equals
returnsfalse
,所以新对象被添加到同一个桶中。
您需要正确执行合约才能正常工作。