Java - PriorityQueue与已排序的LinkedList

msr*_*msr 13 java sorting linked-list priority-queue

哪个实现不那么"重":PriorityQueue或排序的LinkedList(使用Comparator)?

我希望对所有项目进行排序.插入将是非常频繁和偶尔我将必须运行所有列表来进行一些操作.

eri*_*son 27

A LinkedList是最糟糕的选择.使用ArrayList(或更一般地,RandomAccess实现者),或PriorityQueue.如果使用列表,则只在迭代其内容之前对其进行排序,而不是在每次插入之后对其进行排序.

有一点要注意的是,PriorityQueue迭代器提供顺序的元素; 你实际上必须删除元素(清空队列)以按顺序迭代它的元素.

  • +1表示PriorityQueue的迭代顺序. (10认同)
  • @SobiborTreblinka然后你不是迭代队列的元素,而是新的`List`的元素.由于用户特别询问是使用`List`还是`PriorityQueue`,如果最后每次都使用列表,那么使用具有额外开销的队列是没有意义的. (3认同)

noh*_*hat 5

您应该实现两者,然后对实际数据进行性能测试,以查看哪些在您的特定情况下效果最佳.

  • 这回答了所有“X vs. Y”Stackoverflow 问题,因此没有回答。 (3认同)
  • 是.如果插入经常发生,而查找不经常发生,那么最好只是在查找上进行排序和排序.您可以缓存它是否已经排序.这取决于每次发生的频率.这就是测试的用武之地.这应该是二年级数据结构课程中的一个测试问题. (2认同)