2013-03-22 4 views
4

두 개의 키와 값을 가진 Hashmap과 같은 somehting의 분류를 구현해야합니다. 두 개의 키가 정수이고 값이 제 정의 된 일반적인 MyObject 인 경우 Hashmap<K1, K2, V>라고합시다. Android SparseArray <SparseArray <SparseArray > 초기화

나는 this, thisthis 게시물을 읽고, 나는 또한 구아바 프로젝트 the table interface를 제공하는 것을 알고,하지만 난 가능한 한 내 프로젝트 작게 유지하기 위해 (꼭 필요하지 않은 경우) 외부 라이브러리를 사용하지 않습니다. 그래서 SparseArrays를 사용하기로 결정했습니다. 내 키가 int이고 반드시 0에서 시작하여 증가하지 않기 때문에 이것이 더 나은 선택이라고 생각했습니다.

SparseArray<SparseArray<MyObject>> myObjectSparseArray = new SparseArray<SparseArray<MyObject>>(); 

이제이 점에 가자 :

나는이 초기화 작업을 수행. 나는이 작동 종류 수행 할 수 있습니다

MyObject myObject = new MyObject(); 
myObjectSparseArray.get(3).put(2,myObject); 

또는 내가 좋아하는 뭔가를해야한다 : 즉

MyObject myObject = new MyObject(); 
myObjectSparseArray.put(3, new SparseArray<MyObject>()); 
myObjectSparseArray.get(3).put(2,myObject) 

을 :이 한 줄에 모두 SparseArrays을 초기화합니까?

SparseArray<SparseArray<MyObject>> myObjectSparseArray = new SparseArray<SparseArray<MyObject>>() 

사례에 대한 구현이 더 좋다고 생각하십니까?

답변

1

두 개의 키와 하나의 값이있는 경우 보통 HashMap 또는 SparseArray을 사용하고 두 키를 하나의 값으로 결합합니다. String이고 하나가 Long 인 키가 있다고 가정하면지도 키는 (strKey + longKey).hashCode()이됩니다. Integer으로 사용하고 SparseArray 또는 String에 저장하고 HashMap을 사용합니다.

+0

모두 INT, I 정상 '해시 맵'또는 'SparseArray'를 이용하여 두 INT 의해 이루어지는 키 문자열로 사용할 수 있다고 생각 유일한 대안 용액이다 : INT 키 1 = 3; int key2 = 2; String Key = "key1 :"+ key1 + "key :"+ key2; 하지만 조금 까다 롭습니다. –

+0

왜 까다 롭다고 생각하니? 'String key = key1 + key2' (우리의 경우 key String은 "32"이어야합니다),'String' itslef를 사용하여'key.hashCode()'또는'HashMap'을 수행함으로써'SparseArray'를 사용할 수 있습니다. – Elad92

0

는 견인 SparseArray 당신이 당신의 key쌍에 각각의 고유 한 첫 번째 키에 대한 새로운 SparseArray를 할당하기 때문에 처음에 SparseArray있는의 목적에 위배됩니다 중첩 된 데.

좋은 해결책은 해시 맵을 사용하고 두 개의 int 값 (예 : )을 사용하는 키 객체 또는 단순히 두 개의 키를 보유하는 객체를 사용하는 것입니다. 열쇠