首页 > 解决方案 > Java Streams() 与 Heap.poll() 的区别

问题描述

在解决 Leetcode 上的问题时,我在将堆元素转换为列表时使用方法 2 得到了错误的答案。其余的方法是相同的。两者有什么区别?我以前认为两者是一样的。

问题https://leetcode.com/problems/top-k-frequent-words/

解决方案1:

List<String> ans = new ArrayList();
while (!heap.isEmpty()) ans.add(heap.poll());

解决方案2:

List<String> ans = heap.stream().collect(Collectors.toList());

完整代码:https ://editor.mergely.com/FhTbQDIg/

标签: javaalgorithmcollectionsjava-streamheap

解决方案


这是一个常见的问题。参考这个。当您直接流式传输时,它使用该iterator()方法,因此不会维持顺序。

您可以将您的线路更改为

List<String> ans = Stream.generate(heap::poll)
  .limit(heap.size())
  .collect(Collectors.toList());

推荐阅读