数据结构具有以下属性?

时间:2017-05-21 08:19:43

标签: java data-structures

是否存在执行以下操作的数据结构:

  1. 返回给定索引的值
  2. 返回给定值
  3. 的索引
  4. 返回按索引排序为List<>
  5. 的所有值

    据我所知,HashMap支持属性2,不支持属性1和3.

    ArrayList支持1和3但不支持2.

    是否有符合我需求的东西?

2 个答案:

答案 0 :(得分:2)

List(任何列表包括ArrayList)支持您的所有3个要求。你已经知道的1和3,#2见方法https://issues.cloudera.org/browse/LIVY-74。另请参阅相关方法lastIndexOf()

答案 1 :(得分:2)

(1)和(2)描述bi-directional地图; Guava库提供此several implementationsdata structure

不幸的是,没有SortedBiMap类(目前),但是根据您的具体限制,您可能能够以不同的方式解决(3)。

例如,最简单的方法是创建一个包含BiMap<Integer, V>List<V>的新包装类型,并确保两个数据结构保持同步。对于某些用例来说,这可能是低效的(例如,由于支持列表,删除是O(n)),但可能就是你所需要的。

如果你真的不需要List,你可以尝试放松约束(3),但只需要能够以固定的顺序迭代,在这种情况下你可以使用Guava的{{ 3}},保证按插入顺序迭代。

否则,您可以创建自己的SortedBiMap类型,在ImmutableBiMap之后建模,但使用TreeMap代替HashMap。这将允许您按顺序迭代键(例如0-> n ),无论它们的插入顺序如何。