实际上,我的Edge课堂上不会有这种逻辑,而是某种监督类,例如Graph类。这样做的原因是因为 anEdge只是一个有 2 个顶点的对象。它对图中的其余边一无所知。
因此,为了扩展@noMad 的答案,我实际上会将他的checkIfSameEdge方法放在我的Graph课堂上:
public class Graph {
private List<Edge> edges;
....
public void addEdge(Edge e) {
for (Edge edge : edges) {
if (isSameEdge(edge, e) {
return; // Edge already in Graph, nothing to do
}
edges.add(e);
}
private boolean isSameEdge(Edge edge1, Edge edge2) {
return ((edge1.to.equals(edge2.to) && edge1.from.equals(edge2.from))
|| (edge1.to.equals(edge2.from) && edge1.from.equals(edge2.to)))
}
}
顺便说一句:我会重命名toand fromto vertex1andvertex2因为它是一个无向图,并且 to 和 from 指示方向,但这只是我的意见。