我需要支持比读取更多的插入,并保持数据排序。哪个效果更好:
使用PriorityQueue
提供比较器
或
每次插入后使用ArrayList
并调用.sort()
吗?
每次打电话给.sort()
感觉很不对劲,但我不清楚为什么。
答案 0 :(得分:8)
优先级队列不会使您的数据排序。它仅允许您调用以获取其最小元素。如果对优先级队列中的所有元素都执行此操作,则最终将能够形成已排序元素的列表。但是同样,您将有一个空的优先级队列。
因此,如果您需要在不改变数据结构的情况下随时随地读取内容,优先级队列不适合您。
您可能正在寻找的是使用TreeSet / TreeMap,它使您可以使数据保持排序,并且插入/删除操作相对便宜(大约O(lg n))。
答案 1 :(得分:2)
PriorityQueue
是最小/最大堆-数据未排序在其中;您将始终需要调用poll
直到队列用完-因为根据您的Comparator
,队列中的第一个元素始终是“最小/最大”的元素。
您确实在寻找TreeSet
;每次插入/删除元素时都不需要调用sort
。