public boolean equals(Object o) { if (o == null) return false; if (o instanceof Edge) { //if both edges are of type 'undirected', it doesn't matter what is source and what target if (this.getType().equals(EdgeType.UNDIRECTED) && ((Edge) o).getType().equals(EdgeType.UNDIRECTED)) { return ((Edge) o).getSource().equals(source) && ((Edge) o).getTarget().equals(target) || ((Edge) o).getSource().equals(target) && ((Edge) o).getTarget().equals(source); } else { return ((Edge) o).getSource().equals(source) && ((Edge) o).getTarget().equals(target); } } return false; }