요소 등록 정보를 기반으로 조회를 제공하는 Java에서 Set
구현을 찾고 있습니다. 구아바 용어로 생각하면 Function<Element, SearchKey>
(모든 요소 집합에서 고유해야 함)을 사용하고 을 반환하는 find(SearchKey key)
메서드를 제공하면 함수가 key
을 반환합니다. 필요Java의 "IndexedSet", "MapSet"또는 "SetMap"구현
명백한 가정은 만족한다 :
이function(element)
의 결과는 세트element
의 전체 수명 동안 일정하다.- 함수는 모든 일련의 요소 고유 결과를 제공
이유 :
가끔 Set<Element>
에 대한 필요성이 상기 필드 타입은 JPA 엔티티 또는 4 회의 경우처럼 (a Map<SearchKey, Element>
로 변경할 수 없다 파티 코드). 그럼에도 불구하고 이런 객체를 만들 때 Map
과 같은 기능을 가진 Set
구현을 안전하게 사용할 수 있습니다.
대안 :이
- 이
Map
-like 능력을 가지고 있지 완벽한 것 어느 것도 이미 발견 한 몇 가지 대안이있다 -find(SearchKey)
구현을위한 선형 검색을 사용하여가 (모든 작동Set
구현 : TreeSet
을Comparator
과 비교하는 것SearchKeys
- 이 더 이상 요소 평등
을 존중 특히 것을를 해킹하지 않는- 은 "등가 설정"(... uogh) 메소드가
ceiling
이라고하고 조회 목적을 위해 인공Element
를 구성해야한다 (http://code.google.com/p/guava-libraries/issues/detail?id=576) "을 찾아"-하지만 당신의 시간을 절약하고 금지 - 구현되지 않고,하지 않는 것 당신이 더 이상 대안을 모르는에 대답하려는 경우
(될 것한다. 이것은 내가 이미 알고있는 것입니다, 당신의 대답을 받아 들일 수 없을 것입니다.)
두 개의 역할을 제공하는 * 단일 * 개체가 꼭 필요합니까, 아니면 집합을 가지고 개별적으로 색인을 생성 할 수 있습니까? 'Maps.uniqueIndex'와 함께? 당신은 언제나 컴포지션과 위임을 결합하여 그 아이디어를 사용하여 하나의 객체에서 두 인터페이스 집합을 모두 노출하는 고유 한 유형을 생성 할 수 있습니다. –
당신의 이유는 왜 'Set'이 필요한지에 대한 이유입니다. 왜 * both *를 가질 수 없는지 설명하지 못합니다. –
예. 'HashSet'을 서브 클래스 화하고 추가적인 "인덱스"필드를지도로 만들고 그것을 스스로 관리 할 수 있습니까? 그래도 약간의 오류가 발생하기 쉽습니다. –