带索引检索的排序数据结构

时间:2011-06-24 06:35:20

标签: java collections

哪个Collection以某种指定的顺序存储数据,并且可以根据索引返回或设置元素?我知道TreeSet实现了SortedSet,因此根据自然顺序或程序员提供的某些Comparator对象存储数据。但我不知道如何使用索引检索或设置TreeSet中的元素。另一方面,ArrayList和一些其他结构可用于检索或设置符合任何索引的元素。但它们不按排序顺序存储元素。有这两种功能的方法吗?

3 个答案:

答案 0 :(得分:1)

您可以使用ArrayList并使用Collections.sort对其进行排序。如果必须插入元素,则可以使用Collections.binarySearch找到插入点,为插入提供O(log n)复杂度(而不是O(n log n)用于求助)。 ArrayList提供overload of add that takes a position parameter

答案 1 :(得分:0)

将元素填充到ArrayList中并通过调用对其进行排序 Collections.sort()。

答案 2 :(得分:0)

看一下indexed-tree-map http://code.google.com/p/indexed-tree-map/我增强了TreeMap,以便通过索引提供访问和检索。 要获取不存在的键的插入索引,可以尝试运行put-entryIndex-remove序列。虽然它可能不是非常有效的您的要求。我的entryIndex实现基于首先查找条目然后计算其索引。我将看看是否可以针对不存在的密钥进行改进。

您不能在排序集中按索引设置元素,而不会意外地破坏排序顺序。如果您的意思是“按键索引设置地图的值”,那么您可以再次使用index-tree-map。只需通过索引找到密钥并使用put来覆盖该值。