所以我正在玩java.util.PriorityQueue
的源代码。您可以在此处查看:http://kickjava.com/src/java/util/PriorityQueue.java.htm
我需要查看队列的尾部。这个课程只提供偷看队列的头部。有没有一种简单的方法可以修改这个类以允许我选择尾部?
我正在寻找本课程中的任何更改/智能黑客以允许我这样做。我的第一次尝试是偷看queue[size]
,但它没有用。
答案 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