SortedList允许重复和随机访问元素

时间:2015-04-02 18:32:15

标签: java algorithm sorting sortedlist

我正在开发一种算法,它在很大程度上依赖于某些列表中元素的顺序,但是,该列表需要允许重复和随机访问其元素(不使用迭代器)。我在java中搜索过这样的东西,但找到的选项总是缺少我提到的条件之一。

任何人都可以建议我在java中解决这个问题,具有低或中等时间复杂度?

如果我扩展了ArrayList的类并重写了add方法,并且在添加之后我调用了collection.sort(),那么在时间复杂度方面会不会很好?

我认为添加一个元素需要一个恒定的时间,因为它直接添加到列表的末尾,而sort方法需要n logn,所以在这种情况下,插入需要n logn时间吗?

感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用Google的Guava库中的TreeMultiset。它没有索引随机访问器,但您可以通过指定范围界限来访问子列表。

http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/index.html

答案 1 :(得分:1)

您可以使用TreeMap按键排序顺序和密钥发生次数存储密钥,您可以将其存储为值。 现在,您可以遍历Map并填充ArrayList(填充重复项,其中键的值大于0) 总体复杂性是nlogn 空间复杂性日志

如果扩展ArrayList并找到插入点/或调用collections.sort(),则算法最好是O(n ^ 2 * logn)。 如果List的初始容量不足以进行所有插入,则会调整大小(额外的O(n)操作)