Android SparseArray <sparsearray <object>&gt;初始化</sparsearray的<object>

时间:2013-03-22 14:41:55

标签: android initialization sparse-array multikey

我必须使用两个键和一个值来实现像Hashmap这样的分类,比如说Hashmap<K1, K2, V>,其中两个键是整数,值是我定义的通用MyObject。

我看了thisthisthis帖子,我也知道guava项目提供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>>() 

您认为我的案例有更好的实施吗?

2 个答案:

答案 0 :(得分:1)

如果您有两个键和一个值,我只会使用普通HashMapSparseArray,并将这两个键合并为一个值。 假设您有一个String密钥和一个Long密钥,因此您的地图密钥将为: (strKey + longKey).hashCode()。您可以将其用作Integer并将其保存到SparseArrayString并使用HashMap

答案 1 :(得分:0)

拖拽嵌套SparseArray是出于首先考虑SparseArray的目的,因为您将为SparseArray对中的每个唯一第一个键分配一个新的key

一个很好的解决方案是使用hashmap并使用一个带有两个int值的键对象(例如 Point )或者你定义的只包含两个键的对象。