<分区>
我有一个 HashSet,它在图形中存储一些边。 每条边有两个节点。
如果图是无向的,添加副本应该会失败:
Edge a = new Edge(new Node("aa"), new Node("bb"));
Edge duplicate = new Edge(new Node("aa"), new Node("bb"));
但在下面的例子中它起作用了:
System.out.println(a.equals(duplicate));
Set<Edge> sete = new HashSet<Edge>();
System.out.println(sete.contains(a));
System.out.println(sete.add(a));
System.out.println(sete.contains(duplicate));
System.out.println(sete.add(duplicate));
Output:
true
false
true
false
true
编辑: 好的,现在我已经添加了一个 hashCode 方法,它适用于有向边。 有人可以帮我计算无向边的哈希值吗?
public class Edge {
private Node first, second;
@Override
public /boolean equals(Object ob) {
if (ob instanceof Edge) {
Edge edge = (Edge) ob;
if (first.equals(edge.first)
&& second.equals(edge.second)
|| first.equals(edge.second)
&& second.equals(edge.first))
return true;
}
return false;
}
@Override
public int hashCode() {
int hash = 17;
int hashMultiplikator = 79;
hash = hashMultiplikator * hash
+ first.hashCode();
hash = hashMultiplikator * hash
+ second.hashCode();
return hash;
}