Set与Map的Key的Hash值为存储位置,而当Key为自定义类型时,则会因为地址不同,Hash值不同。
想要使地址不同而Hash值相同,则需要重写类中的hashCode和equals方法。
若要进行不相等比较,则在自定义类上实现Comparable接口中的compareTo方法。
import java.util.*;
public class Main {
static class Node {
int a, b;
public Node() {}
public Node(int a, int b) {
this.a = a;
this.b = b;
}
@Override
public int hashCode() {
return Objects.hash(a, b);
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Node) {
Node t = (Node)obj;
return a == t.a && b == t.b;
}
return false;
}
}
public static void main(String[] args) {
Map<Node, Integer> hm = new HashMap<>();
hm.put(new Node(1, 1), 1);
hm.put(new Node(1, 1), 2);
// 2
for (Map.Entry<Node, Integer> entry : hm.entrySet()) {
System.out.println(entry.getValue());
}
}
}