是否存在执行以下操作的数据结构:
据我所知,HashMap
支持属性2,不支持属性1和3.
ArrayList
支持1和3但不支持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 implementations的data structure。
不幸的是,没有SortedBiMap
类(目前),但是根据您的具体限制,您可能能够以不同的方式解决(3)。
例如,最简单的方法是创建一个包含BiMap<Integer, V>
和List<V>
的新包装类型,并确保两个数据结构保持同步。对于某些用例来说,这可能是低效的(例如,由于支持列表,删除是O(n)),但可能就是你所需要的。
如果你真的不需要List
,你可以尝试放松约束(3),但只需要能够以固定的顺序迭代,在这种情况下你可以使用Guava的{{ 3}},保证按插入顺序迭代。
否则,您可以创建自己的SortedBiMap
类型,在ImmutableBiMap
之后建模,但使用TreeMap
代替HashMap
。这将允许您按顺序迭代键(例如0-> n ),无论它们的插入顺序如何。