2013-03-22 87 views
4

我必須使用兩個鍵和一個值來實現像Hashmap這樣的分類,比如Hashmap<K1, K2, V>,其中兩個鍵是整數,值是我定義的通用MyObject。Android SparseArray <SparseArray <Object>>初始化

我看thisthisthis後,我也知道,番石榴項目提供the table interface,但我不希望使用外部庫(如沒必要),以保持我的項目儘可能小。 所以我決定使用SparseArrays:我認爲這是更好的選擇,因爲我的鍵是int,並不一定從零開始並增加。

我這樣做初始化:

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

如果您有兩個鍵和一個值,我只需使用正常的HashMapSparseArray,並將這兩個鍵合併爲一個值。 比方說,您有一個密鑰是String,另一個是Long,因此您的地圖密鑰將爲: (strKey + longKey).hashCode()。您可以使用它作爲Integer並將其保存到SparseArrayString並使用HashMap

+0

兩個鍵是int,則唯一的替代解決方案,我想是使用正常「的Hashmap」或「SparseArray」和作爲密鑰由兩個int構成的字符串中使用: INT鍵1 = 3; int key2 = 2; String Key =「key1:」+ key1 +「key:」+ key2; 但我發現它有點棘手.. – 2013-03-22 14:55:53

+0

你爲什麼覺得這很棘手? 'String key = key1 + key2'(在我們的例子中,鍵字符串應該是「32」),您可以通過'''itslef'使用'key.hashCode()'或'HashMap'來使用'SparseArray'。 – Elad92 2013-03-22 15:01:45

0

已經拖嵌套SparseArray是針對在第一時間爲SparseArray,因爲你會在你的key對分配爲每一個獨特的第一密鑰生成新的SparseArray的目的。

一個很好的解決方案是通過使用hashmap並使用一個帶有兩個int值的關鍵對象(例如)或您定義的只保存兩個鍵的對象。

相關問題