ArrayList.sort()与PriorityQueue

时间:2018-10-02 19:42:34

标签: java algorithm sorting arraylist priority-queue

我需要支持比读取更多的插入,并保持数据排序。哪个效果更好:

使用PriorityQueue提供比较器

每次插入后使用ArrayList并调用.sort()吗?

每次打电话给.sort()感觉很不对劲,但我不清楚为什么。

2 个答案:

答案 0 :(得分:8)

优先级队列不会使您的数据排序。它仅允许您调用以获取其最小元素。如果对优先级队列中的所有元素都执行此操作,则最终将能够形成已排序元素的列表。但是同样,您将有一个空的优先级队列。

因此,如果您需要在不改变数据结构的情况下随时随地读取内容,优先级队列不适合您。

您可能正在寻找的是使用TreeSet / TreeMap,它使您可以使数据保持排序,并且插入/删除操作相对便宜(大约O(lg n))。

答案 1 :(得分:2)

PriorityQueue是最小/最大堆-数据未排序在其中;您将始终需要调用poll直到队列用完-因为根据您的Comparator,队列中的第一个元素始终是“最小/最大”的元素。

您确实在寻找TreeSet;每次插入/删除元素时都不需要调用sort