Java:Collection.sort()vs Sorted Set vs PriorityQueue

时间:2018-02-12 15:10:28

标签: java performance sorting

我有以下结构:MyObject列表列表, 和比较2比较MyObjects

任务是从列表中获取N个较小的对象。

问题可以通过以下几种方式解决:

  1. 将所有元素放在一个新列表中并使用它进行排序 Collections.sort()或Arrays.parallelSort()

  2. 将所有元素放入ProirityQueue然后检索N个顶部元素

  3. 将所有元素放在SortedSet(TreeSet)中并检索所需的元素 使用迭代器

  4. 我不知道如何选择。 creteria是表演。 "内部列表的大小"约有20个元素和"外部"列表大小约为10

1 个答案:

答案 0 :(得分:2)

如果你只想要大约200个中最低的N个元素,并且N很小(比如说10-20)那么你为什么要把所有元素添加到另一个结构(无论是列表还是PriorityQueue)?只需创建N个项目的数组(如果必须,则创建一个List)。遍历列表列表中的每个元素,并将元素插入N数组中的正确排名。丢弃从列表底部删除的第N个元素。这类似于插入排序算法,但只进行部分排序。

如果N很大(比如200个项目中的150个),则完整排序或PriorityQueue可能会更好。你需要测量。