高效的数据结构,带有两个键

时间:2012-02-15 00:37:02

标签: java android

我有一个Android应用,我在其中使用HashMap来存储容器对象。在App的过程中,连续访问数据结构。

然而,大约一半的时间,引用不是映射中的Key而是来自对象的另一个变量,所以我最终一次又一次地在结构上循环。

是否有一种有效的方法可以在Java中的两个键上建立索引数据结构?

4 个答案:

答案 0 :(得分:5)

为什么不是两张具有不同键的地图,但两者都指的是相同的值?

答案 1 :(得分:2)

管理两个地图,其中两组键映射到相同的基础对象集。将它们包装在具有类似于法线贴图的方法的类中,但是在内部搜索两个键,并同步添加和删除。

这是有效的,因为操纵(在最坏的情况下)与管理单个地图成线性比例。

答案 2 :(得分:1)

您可以使用一个包含两个键的地图:

Map<Object, Person> personMap = new HashMap<Object, Person>()

Person person = ...
personMap.put(person.getName(), person)
personMap.put(person.getSSN(), person)

然后你可以通过密钥检索。这当然假设您的密钥用法没有冲突。如果您的两个键是不同的类类型,那么这是安全的。如果您的密钥类型相同(例如String),那么您可能不想使用这两个地图解决方案。

后续行动:这种方法确实会失去类型安全性,但它只影响put(K, V)putAll(Map<? extends K, ? extends V>)get(Object)和{{1}总是接受对象。

因此,有了这个限制,我会包装这个单一的地图,或者使用两个地图解决方案(也包裹)。

答案 3 :(得分:1)

我创建了一个结合了两个变量的关键对象。