ArrayList.sort()vs PriorityQueue

Aft*_*ess 9 java sorting algorithm arraylist priority-queue

我需要支持比读取更多的插入并保持数据排序.哪个会表现更好:

使用PriorityQueue提供比较器

要么

每次插入后使用ArrayList和调用.sort()

.sort()每次打电话都感觉不对,但我无法说清楚原因.

dev*_*ium 9

优先级队列不会对您的数据进行排序.它只允许您调用以获取其最小元素.如果对优先级队列中的所有元素执行此操作,则最终将能够形成已排序元素的列表.但话说回来,你将有一个空的优先级队列.

因此,如果您需要能够在任何位置动态读取内容而不改变数据结构,则优先级队列不适合您.

您可能正在寻找的是使用TreeSet/TreeMap,它允许您保持数据排序和插入/删除相对便宜(大致为O(lg n)).

  • 我认为树集要慢得多.树集相对"重",具有自平衡逻辑,大量节点和指针间接等.另一方面,标准的快速/合并排序应该相对简单,无需在内存中创建所有这些节点,如树集呢.树集的唯一优势是它是动态的. (2认同)
  • @devouredelysium 通常,`TreeSet` 是在`Map` 上实现的,过去 20 年一直都是这样 - 没有多少人抱怨间接、节点、内存。使用最容易读取的内容 - 及其*绝对*`TreeSet` (2认同)