신참 질문이해 자바 HashSet에 대한 자바 HashSet의 방법
Set<User> s = new HashSet<User>();
User u = new User();
u.setName("name1");
s.add(u);
u.setName("name3");
System.out.println(s.contains(u));
사람이 왜이 코드 출력 거짓 설명 할 수가 들어? 게다가이 코드는 심지어 사용자의 equals 메소드를 호출하지도 않습니다. 그러나 HashSet과 HashMap의 출처에 따르면 그것을 호출해야합니다. 사용자의 메소드 equals는 단순히 사용자 이름에 대해 equals를 호출합니다. 메서드 hashCode 사용자 이름의 hashCode를 반환합니다.
당신이 구현나요 (해시 충돌 반대) 두 항목이 실제로 동일한 있는지 확인,
equals
를 호출'User.equals()'방법 ? –Jon Skeet의 인용문 "해시 세트의 오브젝트는 불변이거나, 해시 세트 (또는 해시 맵)에서 사용 된 후에도 변경하지 않으려면 규율을 수행해야합니다." - http://stackoverflow.com/questions/4718009/mutable-objects-and-hashcode – Qwerky