我怎样才能看到java.util.PriorityQueue的尾部?

时间:2014-09-18 18:17:46

标签: java data-structures collections heap priority-queue

所以我正在玩java.util.PriorityQueue的源代码。您可以在此处查看:http://kickjava.com/src/java/util/PriorityQueue.java.htm

我需要查看队列的尾部。这个课程只提供偷看队列的头部。有没有一种简单的方法可以修改这个类以允许我选择尾部?

我正在寻找本课程中的任何更改/智能黑客以允许我这样做。我的第一次尝试是偷看queue[size],但它没有用。

3 个答案:

答案 0 :(得分:5)

与大多数优先级队列一样,Java的PriorityQueue是用堆实现的。

堆是一种数据结构,它只维护所有父项小于其子项的属性,或者所有父项都大于其子项。儿童没有固有的秩序。

因此,找到尾部的唯一方法是在底层之间进行线性搜索,对于大小O(n)优先级队列,这需要花费n时间。

答案 1 :(得分:1)

是的,但是要付出额外的空间复杂性。

PriorityQueue pq_new =新的PriorityQueue <>(Collections.reverseOrder());

或者如果您尚未导入收藏集,则:-

PriorityQueue pq_new =新的PriorityQueue <>((java.util.Collections.reverseOrder());

现在将PriorityQueue的元素添加到此pq_new中。 因此,pq_new.peek()将为您提供所需的答案,即原始PriorityQueue的尾部元素。

答案 2 :(得分:0)

如何使用toArray()方法并访问最后一个位置?

freq_years <- table(df$Anos)
freq_years
Result:
2009 2010 2011 2012 2013 2014 2015 2017 2018 2019 2020 
  10   12   12    3   11    6    8   12   12   12    5