Java (전체 컨텍스트는 https://github.com/aisthesis/java-graph2012)의 그래프 라이브러리에서 작업 중이며 WeightedEdge 클래스의 hashCode()를 재정의해야합니다. 가장자리가 방향 지어지지 않습니다. 즉, equals() 오버라이드 메서드를 설정하여 두 가중치 e1과 e2에 대해 다음 조건 중 하나가 만족되면 같음을 나타냅니다. from() 및 to() 메서드는 tail 및 head의 정점을 반환합니다. 에지) :가장자리 클래스에 대한 Java hashCode() 덮어 쓰기
- e1.from() == e2.from() & & e1.to() == e2.to() 또는
- e1.from() == e2.to () & & e1.to() == 다른 맥락에서 e2.from()
, 나는 가중 가장자리의 HashSet의를 만들려면, 그리고 내가하지 않는 비켜 또한 중복 가장자리를 치울 내 equals() 재정의와 일치하도록 hashCode() 메서드를 구현하십시오.
그래서, 여기에 (내가 자바의 기본 해시 코드 (방해하지 않은) 내 정점 클래스 및로부터 정점 개체를 참조하는) 내 간단한 해결책 :
@Override
public int hashCode() {
return from.hashCode() + to.hashCode();
}
내 추론 :
은 하나를 얻을 수있는 추가에 대한 효율적이기 때문에- 그것은 효율적입니다 (나는 1도 2 해시 코드에 xor 수도 있겠죠?)
- 그것은 너무 에서 반전과 같은 해시 코드를 제공하기 위해 대칭입니다
- 일반적으로 은 정점이 다른 경우 별개의 해시 코드를 제공합니다.
포인트 3은 분명히 100 %에서 멀기 때문에 제 질문의 일부는 중요해야하는지 여부입니다.
내 일반적인 질문 :이 상황에서 hashCode()를 재정의하는 좋은 방법입니까?
'WeightedEdge' 클래스를 보여주세요. '출발'과 '끝'의 유형은 무엇입니까? –
https://github.com/aisthesis/java-graph2012/blob/master/src/com/codemelon/graph/edge/WeightedEdge.java 여기서 83ff 행. 관련된 것입니다. 'from'과'to'는 둘 다 Vertex 객체입니다. 기본 hashCode() 메소드를 오버라이드하지 않았습니다. –