带索引的数据结构和java中的两个值

时间:2016-07-27 19:35:26

标签: java android data-structures key-value

我有一些我想要组织的数据,但我发现键值数据结构不符合我的要求。

我有一些这样的数据:

1    |  new CustomObject[] {...}
1    |  etc...
5    |  
8    |  
19   |  

目前,我将第一列放入键中,将第二列放入值中。

我遇到的问题是,当我将新值放入键值数据结构时,有时一个键的值会被覆盖,因为有多个值具有相同的键。

理想情况下,我要查找的数据结构将包含keyAt(int index)

等方法

有谁知道哪种数据结构符合我的要求?

由于我正在为Android开发,我已经查看了Android的数据结构文档,如SparseArray<E>ArrayMap<K, V>,但它们都是键值结构,这意味着我的密钥将被覆盖提出新的价值观。

3 个答案:

答案 0 :(得分:1)

  • 根据我的理解,你真正想要的是一个像 每个索引有两个值的有序数组。你可以做什么 根据我的理解,有两个平行ArrayList s,其中一个 &#39;关键&#39; list和另一个包含与之关联的值 键。你必须确保当你添加东西时, 你也更新了另一个。你可以做的另一件事是创造一个 class的每个实例同时包含&#39;键&#39;和它的 值。

    • 这些方法的问题在于你不会保持这种能力 按键拉,但你必须按索引拉,然后检查 关键和价值。
  • 另一种选择是拥有HashMap<Key, List<value>>,以便每个键都有一个与之关联的值列表。

    • 这种方法的问题在于,您必须检查是否存在密钥,然后在添加新元素时附加到现有列表。

答案 1 :(得分:1)

Pedro's comment的帮助下,我能够为我的特定用例找到解决方案。

由于我使用Android,因此我使用Pair<F, S>类(也可通过v4支持库获得)和List<E>来帮助我实现我想要的目标。

我用过:

List<Pair<Integer, CustomObject>>

答案 2 :(得分:0)

class Key {
  public int hashCode() {
  /*terurn something*/
 }
}

Map<Key,ArrayList<V>>

什么不符合您的要求?