4

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

我读了这个这个这个帖子,我也知道 guava 项目提供了表格接口,但我不想使用外部库(如果不是严格必要的话)来让我的项目尽可能小。所以我决定使用 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>>() 

你认为我的情况有更好的实现吗?

4

2 回答 2

1

如果您有两个键和一个值,我会使用普通的HashMaporSparseArray并将这两个键组合成一个值。假设您有一个 keyString和一个 isLong所以您的地图键将是: (strKey + longKey).hashCode()。您可以将其用作Integer并将其保存到SparseArray或用作String并使用HashMap

于 2013-03-22T14:50:09.143 回答
0

有两个嵌套SparseArray是违背最初的目的的,因为你将为你的对中的每个唯一的第一个键SparseArray分配一个新的。SparseArraykey

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

于 2013-03-22T14:53:25.753 回答