2009-07-09 3 views
1

특정 값으로 매핑 된 모든 키를 반환하는 메소드가있는 java.util.Map의 구현을 찾고 있습니다. 즉, 여러 키가 같은 가치. Google Collections 및 Apache Commons를 살펴본 결과 아무것도 알지 못했습니다. 물론 키 집합을 반복하고 각 해당 값을 확인하거나 두 개의 맵을 사용할 수 있지만 이미 사용할 수있는 것이 있으면 좋겠다.getKeysForValue를 지원하는 Java Map 구현을 찾고 있습니다.

답변

2

그 해결책이 유용할지 모르겠지만 키와 값의 표준 맵을 사용하고 값에서 키까지 MultiMap을 사용하면 쉽게 구현할 수 있습니다.

맵에서 키를 제거 할 때 두 구조의 동기화를 처리해야합니다. 멀티 맵의 값에 매핑 된 키 세트에서 키 자체를 제거해야합니다 .

구현하기가 어렵지 않습니다. 메모리 오버 헤드 측면에서 약간 무거울 수 있습니다.

+0

감사합니다. 예, 두 개의지도를 사용하는 것에 대해 생각했습니다. 한 맵에 구현 된 것이 있으면 좋겠지 만 두 맵을 동기화 상태로 유지하는 것에 대해 걱정할 필요는 없습니다. – Joel

+0

구현이 존재하지 않는 것처럼 보이므로 이것이 가장 좋은 방법입니다. – Joel

1

여기에 찾고있는 것은 bidirectional map이며 여기에는 commons collections에 구현되어 있습니다.

+0

사실 양방향지도는 작동하지 않습니다. 질문을 명확하게하기 위해 편집했지만 키와 값 사이에는 1 : 1 매핑이 없습니다. – Joel

0

값 개체에는 모든 키를 보유하는 속성 (ArrayList 유형 일 수 있음)이있을 수 있습니다. 그런 다음 HashMap (또는 사용하는 Map 임 플 래시)을 확장하고 put을 재정의하면 키를 넣고 개체화 할 때 키를 개체의 키 목록에 추가 할 수 있습니다.

0

여러 키가있는 값을 지원하는 준비가 된 클래스를 찾을 수 없습니다. 그러나 HashMaps 중 하나 대신에 MultiHashMap을 사용하여 Apache Commons DualHashBidiMap을 다시 구현할 수 있습니다.

관련 문제