【发布时间】:2015-07-01 14:15:24
【问题描述】:
我有一个使用ArrayList<T> 的程序,并且该类型T 也实现了Comparable<T>。我需要保持该列表排序。
现在,当我插入一个新项目时,我将它添加到ArrayList,然后调用Collections.sort(myArrayList)。
每次插入新项目时使用Collections.sort 进行排序是否会严重损害运行时复杂性?
是否有更合适的数据结构可以用来始终保持列表排序?我知道一个名为 PriorityQueue 的结构,但我还需要能够按索引获取列表的元素。
编辑:
在我的具体情况下,插入一个新项目比获取一个已经存在的项目要少得多,所以最终一个好的建议也可能是继续使用ArrayList,因为它获取一个项目的时间复杂度是恒定的。但是,如果您知道其他任何事情...
【问题讨论】:
-
TreeSet是你的朋友。 -
您不能/不允许将任何新元素插入其排序位置的任何特殊原因?
-
@kocko
TreeSet也不提供随机访问。 -
代替 Collections.sort,您可以使用二进制搜索来查找插入点 - 这样会更有效。
标签: java data-structures