2009-06-08 2 views
0
HashMap<Pair<Class<T>,Boolean>,String> abc = new HashMap<Pair<Class<T>,Boolean>,String>(); 

여기에는 두 가지 접근 방법이 있습니다. {class, Boolean} -> {string} 키를 만들거나이 작업을 수행 할 수도 있습니다.합성 키 v/s 2 단계의 간접 참조

{클래스} -> {부울, 문자열}

첫 번째 방법은 두 번째 방법은 2가 간접의 1 개 수준 ... 여기 장단점 무엇을 가지고? 두 번째 접근법이 좋지 않습니까?

+0

이지도는 함수이므로 당신이 원하는 것을하기위한 가장 자연스러운 방법은 우리가 모르는 비즈니스 논리에 달려 있습니다. 그래서 ... 뭐하고 있니? – akappa

+0

클라이언트는 값 (문자열)에 액세스해야하며 쿼리 속도는 5000/초입니다. 지도 << 클래스, 부울>, 문자열> 또는지도 <클래스,지도 <부울, 문자열 >>. – user117736

+0

클래스는 무엇을 나타 냅니까? 실제 수업에서이 모든 것을 할 수 있습니까? –

답변

2

이상적으로는 문제/솔루션 도메인에 자연스럽지 않은 선택이 가장 적합 할 수 있습니다. Key < 클래스, 부울 >은 도메인의 모든 것을 나타 냅니까? 부울 문자열 >은 도메인의 모든 것을 나타 냅니까? 간접 지정의 1- 레벨 또는 2- 레벨을 사용하면 숨기려는 구현 세부 사항이 될 수 있습니다.

그러나 성능상의 모든 결정이 동일하면 (예 : 액세스 패턴이 한쪽 또는 다른 쪽, 좋은 해시 함수, 희소지도 등을 선호하지 않음), HashMap이라고 생각합니다. < Key < X, Y >, Z>는 HashMap보다 빠릅니다. < X,지도 < Y, Z > > - 더 큰 HashMap에서 1 룩업은 작은지도에서 2 룩업보다 빠르다고 생각합니다. ? 당신은 부울 키를 가지고 있기 때문에

, 대신 마법 :) (2 개 HashMap의 테이블 (사실에 대해 하나의 거짓 하나) 및 일부 삼항 연산자를 고려하십시오

final Map<Class, String> falseMap = new HashMap<Class, String>(); 
final Map<Class, String> trueMap = new HashMap<Class, String>(); 

final String s = ((booleanKey ? trueMap: falseMap).get(classKey));