2010-03-03 3 views
5

SortedMultiSet(stackoverflow question) 과 비슷한 Google의 결정인가 아니면 MultiKeyMap을 사용하지 않았기 때문입니까?Google Collections가 Apache Collections와 같은 MultiKeyMap을 지원하지 않는 이유는 무엇입니까?

나는 MultiKeyMap의 대체 키가 사용자 정의 클래스를 클래스 멤버로 여러 키를 포함하는 키로 사용할 수 있다는 것을 알고 있습니다. 반대로, 나는 MultiKeyMap의 get을 호출 할 때 다중 키를 지정하는 개념을 좋아합니다.

아파치의 버전은 MultiKeyMap입니다.하지만 제네릭이 심각하게 누락되어있어 현대적인 구현을 위해 Google Collections를 살펴 보았습니다. 누군가 Google이 아직 지원하지 않는 이유가 있거나 더 나은 대안이 있다면 의견을 말하십시오.

답변

6

"테이블"(K1이 "행 키"이고 K2가 "열 키"임)이라고하는 2 계층 맵을 매우 훌륭하게 구현했습니다. 아직 공개되지 않았다. 과거 2 개의 열쇠는, 그러나, 감소 반환이다.

+2

나는이 '테이블'데이터 구조에 몰래 피크를 가질 수 있습니다 :) 응답 공식 구글에서 수집 사람이하는? 왜 3 층 및 4 층지도가 없습니까? –

+0

@ kevin-bourrillion에는이 2 계층지도가 아직 출시되지 않았습니까? – Cat

+0

네, 가장 upvoted 대답은 여기에 지적했다. 내 대답은 받아 들여지지 않아야한다. –

2

제네릭이 여기 구현을위한 방안이 될 수도 있습니다. 지도 인터페이스를 살펴보면 키 유형 (K)과 값 유형 (V)에 대한 일반 지정자가 있습니다. 구현을 여러 클래스 (키 구성 요소의 각 수에 하나씩)로 분리하지 않고도 쉽게 제네릭을 사용하여 지정하는 것이 가능할 것이라고는 생각하지 않습니다. 구현이 기본적으로 당신이 (사용자 정의 클래스를 사용) 제안하는 일을한다

MultiKeyMap2<K1,K2,V> 
MultiKeyMap3<K1,K2,K3,V> 
MultiKeyMap4<K1,K2,K3,K4,V> 
MultiKeyMap5<K1,K2,K3,K4,K5,V> 

:

당신은 각각의 클래스가 필요합니다. 그러나 형식적으로 클래스를 만들지는 않으며 모든 것이 인라인됩니다. 실제로 구현 세부 사항입니다. 그러나 Google 콜렉션을 사용하기 위해 동일한 작업을 수행하는 사용자 정의 클래스는 hashCode() 및 equals()를 구현하는 것과 동일한 방식으로 작동합니다.

9

참고 답변 2010 년 3 월에 답변을 받았지만 2010 년 9 월 현재 구아바에는 Table이 포함되어 있습니다.

+0

여기서 제공 한 업데이트 된 정보를 사용하여 수락 된 답변을 편집 할 수 있습니까? –

+0

@ MonisIqbal 당신은 그렇게하기로되어 있지 않습니다. 여기 [이 주제에 관한 메타 중 많은 게시물 중 하나] (http://meta.stackoverflow.com/a/320293/1768232)입니다. 당신이 받아 들인 대답을 좋아하지 않으면, 그것을 downvote. 내 것이 마음에 들면, upvote, 그게 버튼을위한 것입니다. 그러나 다른 사람의 대답을 완전히 콘텐트 편집하면 안됩니다. 편집 기능은 콘텐트를 변경하지 않는 개선을위한 것입니다. – durron597