Java Set <> (또는 해당 키의 경우 <>에 포함 된) 오브젝트가있는 경우, 해당 필드는 (hashCode()
, equals()
, compareTo()
등을 통해) 신원 또는 관계를 결정하는 데 사용되는 정보는 수집 작업에 대한 명시되지 않은 동작을 일으키지 않고는 변경할 수 없습니까? (편집 : this other question에서 언급으로)Java Set의 오브젝트에 대한 변경 가능 필드
(즉,이 필드는 불변해야하거나, 당신이 컬렉션에서 제거 할 객체를 요구해야하고 다음 다시 삽입, 변경.)
내가 Hibernate Annotations reference guide을 읽었으며 그곳에 HashSet<Toy>
이있는 예가 있지만 Toy
클래스에 name
과 serial
이 있으며이 숫자는 변경 가능하며 또한 hashCode()
계산에 사용됩니다 ... 빨간색 깃발이 내 머리와 나는 단지 그것이 그 의미를 이해하고 있는지 확인하고 싶었다.
잠깐, 나는 이것이 정말 나쁜 예임을 깨달았다. 나는 여전히 참조를 보유하고 있으므로, 마지막 contains()는 실제로 true를 반환합니다. HashMaps는 다른 문제이지만 3 일간의 주말에는 거의 끝나고 예제를 파헤 치고 싶지 않습니다. –
ㅎ, 돌아올 때 게시 해주세요. –
다시 기다리십시오. HashSet이 HashMap을 백업으로 사용한다는 것을 잊었습니다. HashMap을 사용하면 버킷에있는 요소에 대해 equals()를 검사하기 전에 hashCode를 사용하여 버킷으로 건너 뛰고 요소를 변경하면 잘못된 버킷으로 건너 뛰고 요소를 찾을 수 없습니다. –