グラフにいくつかのエッジを格納する HashSet があります。各エッジには 2 つのノードがあります。
グラフが無向の場合、複製の追加は失敗するはずです。
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;
}