문제

나는 나를 사용하는 프로젝트를 진행하고 있습니다. HashSet 내가 만든 수업 중 Test. 나는 언급 된 것을 정의했다 HashSet 그렇게 :

HashSet<Test> t = new HashSet<Test>();
t.add(new Test("asdf", 1));
t.add(new Test("hello", 2));
t.add(new Test("hello", 3));

나는 사용을 시도했다

t.contains(new Test("asdf", 1));

그러나 그것은 돌아옵니다 false. 그러나 내가 사용할 때 HashSet<Character> 잘 작동하는 것 같습니다. 나는 이전을 재정의하려고 시도했다 equals 선언이지만 작동하지 않았습니다. 나는 떠나려고 노력했다 equals 혼자, 그러나 나는 여전히 얻었다 false. 내가 뭘 잘못하고 있는지 알아야합니까?

또한 해시 함수를 편집하지 않았으며 Test.equals (Object O) 만 변경했습니다. 간단한 프로젝트이며 Java 문서는 O.equals (this)를 사용한다고 말하면 필요하지 않다고 생각했습니다.

도움이 되었습니까?

해결책

hashcode () 메소드도 과부하해야 할 수도 있습니다.

다른 팁

HashSet.add(Object data) 동일하지 않습니다 HashSet.add(new Test(String, int))

사용하려고 노력하십시오 HashSet.add(new Test("asdf", 1));. 그리고 hashCode() 방법. 코드가 컴파일됩니까?

코드조차 컴파일하지 않습니다 ...

Hashset에는 두 인수를 허용하는 add () 메소드가 없습니다.

당신이 의미한다면

t.add(new Test("asdf", 1));

대신에

t.add("asdf", 1);

이전에 말했듯이 테스트 클래스의 해시 코드 및 동등한 방법이 올바르게 구현되어 있는지 확인하십시오.

내부적으로 hashtable은 오브젝트#hashcode ()를 사용하여 해시 및 객체를 버킷으로, 객체#equals ()를 사용하여 해시 코드 충돌이있는 경우 평등을 테스트합니다. 테스트 클래스가 문자열 동등성을 테스트하기 위해 테스트 클래스가 적절한 구현 (오버레이드)을 제공하는지 확인해야합니다. 그렇지 않으면 기본 오브젝트#equals () 메소드는 객체 인스턴스 ID (ref id)를 사용합니다. 보다 여기 이 주제에 대한 튜토리얼.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top