我必须使用两个键和一个值来实现像Hashmap这样的分类,比如说Hashmap<K1, K2, V>
,其中两个键是整数,值是我定义的通用MyObject。
我看了this,this和this帖子,我也知道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>>()
您认为我的案例有更好的实施吗?
答案 0 :(得分:1)
如果您有两个键和一个值,我只会使用普通HashMap
或SparseArray
,并将这两个键合并为一个值。
假设您有一个String
密钥和一个Long
密钥,因此您的地图密钥将为:
(strKey + longKey).hashCode()
。您可以将其用作Integer
并将其保存到SparseArray
或String
并使用HashMap
。
答案 1 :(得分:0)
拖拽嵌套SparseArray
是出于首先考虑SparseArray
的目的,因为您将为SparseArray
对中的每个唯一第一个键分配一个新的key
一个很好的解决方案是使用hashmap并使用一个带有两个int值的键对象(例如 Point )或者你定义的只包含两个键的对象。