ArrayList.sort() 与 PriorityQueue
ArrayList.sort() vs PriorityQueue
我需要支持比读取更多的插入并保持数据排序。哪个表现更好:
使用 PriorityQueue
提供比较器
或
使用 ArrayList
并在每次插入后调用 .sort()
?
每次调用 .sort()
都感觉不对,但我说不清为什么。
优先队列不会使您的数据保持排序。它只允许您进行调用以获取其最小元素。如果您对优先队列中的所有元素都这样做,您最终将能够形成一个已排序元素的列表。但是话又说回来,你将有一个空的优先级队列。
因此,如果您需要能够在不改变数据结构的情况下在任何位置即时读取内容,那么优先级队列不适合您。
您可能正在寻找的是使用 TreeSet / TreeMap,它允许您保持数据排序和插入/删除相对便宜(大约 O(lg n))。
PriorityQueue
是一个 min/max 堆 - 数据在其中 未排序 ;您将始终需要调用 poll
直到队列耗尽 - 因为根据您的 Comparator
,队列中的第一个元素始终是 "smallest/biggest"。
你真的在找TreeSet
;无需每次 insert/delete 一个元素时都调用 sort
。
我需要支持比读取更多的插入并保持数据排序。哪个表现更好:
使用 PriorityQueue
提供比较器
或
使用 ArrayList
并在每次插入后调用 .sort()
?
每次调用 .sort()
都感觉不对,但我说不清为什么。
优先队列不会使您的数据保持排序。它只允许您进行调用以获取其最小元素。如果您对优先队列中的所有元素都这样做,您最终将能够形成一个已排序元素的列表。但是话又说回来,你将有一个空的优先级队列。
因此,如果您需要能够在不改变数据结构的情况下在任何位置即时读取内容,那么优先级队列不适合您。
您可能正在寻找的是使用 TreeSet / TreeMap,它允许您保持数据排序和插入/删除相对便宜(大约 O(lg n))。
PriorityQueue
是一个 min/max 堆 - 数据在其中 未排序 ;您将始终需要调用 poll
直到队列耗尽 - 因为根据您的 Comparator
,队列中的第一个元素始终是 "smallest/biggest"。
你真的在找TreeSet
;无需每次 insert/delete 一个元素时都调用 sort
。