关于Java PriorityQueue

1. 优先队列当中,迭代器的访问顺序是按照添加的顺序,而不是按照优先级来排列的。

2. 关于offer方法和add方法的区别, 由借口QUEUE<E>中的offer方法指定,即: 将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。 而由于PriorityQueue是一个无界的队列,因此我觉得在优先队列中二者区别不大。例子:

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.PriorityQueue;
public class PriorityQueueTest {
    public static void main(String args[]){
        PriorityQueue<GregorianCalendar> pqueue = new PriorityQueue<GregorianCalendar>();
        pqueue.add(new GregorianCalendar(1982, Calendar.DECEMBER,30));
        pqueue.add(new GregorianCalendar(1980,Calendar.JANUARY,15));
        pqueue.add(new GregorianCalendar(1966,Calendar.JANUARY,20));
        pqueue.add(new GregorianCalendar(2014,Calendar.JULY,06));
        pqueue.add(new GregorianCalendar(1983,Calendar.JANUARY,06));

        for(GregorianCalendar c: pqueue)
            System.out.println(c.getTime());

        System.out.println(pqueue.peek().get(Calendar.YEAR));

        Iterator<GregorianCalendar> iter = pqueue.iterator();

        while(iter.hasNext())
            System.out.println(iter.next().get(Calendar.YEAR));

//        要访问队列中的元素最好使用toArray()方法。
        System.out.println(pqueue.size());
        int max = pqueue.size();
        for (int i =0; i< max;i++)
            System.out.println(pqueue.poll().get(Calendar.YEAR));
    }
}


### 回答1: Java PriorityQueue 的 `size()` 方法可以返回队列中元素的个数。该方法的时间复杂度为 O(1)。以下是一个示例代码: ```java PriorityQueue<Integer> pq = new PriorityQueue<>(); pq.offer(4); pq.offer(1); pq.offer(3); int size = pq.size(); // 返回 3 ``` ### 回答2: Java中的PriorityQueue是一个带有优先级的队列,它的size()方法用于返回PriorityQueue中元素的个数。 在PriorityQueue中,元素是根据其优先级进行排序的。优先级可以是自然排序或者通过Comparator进行指定。优先级较高的元素在队列的前面,优先级较低的元素在队列的后面。当我们向PriorityQueue中添加元素时,元素会根据其优先级被正确地插入到合适的位置,从而保持队列的有序性。 size()方法返回PriorityQueue中元素的个数。当我们调用size()方法时,它会遍历整个PriorityQueue并计算元素的数量,然后将数量作为结果返回。 以下是一个简单的示例代码,演示了如何使用PriorityQueue以及如何获取其大小: ``` import java.util.PriorityQueue; public class PriorityQueueExample { public static void main(String[] args) { PriorityQueue<Integer> pq = new PriorityQueue<>(); // 添加元素到PriorityQueue pq.add(5); pq.add(2); pq.add(8); pq.add(1); // 获取PriorityQueue的大小 int size = pq.size(); System.out.println("PriorityQueue中的元素个数:" + size); } } ``` 运行以上代码,将输出: ``` PriorityQueue中的元素个数:4 ``` 以上就是关于Java PriorityQueue的size()方法的解释和用法。通过使用size()方法,我们可以轻松地获取PriorityQueue中元素的个数。 ### 回答3: Java中的PriorityQueue是一个基于优先级堆的无界队列。它具有以下特点: 1. PriorityQueue的size方法返回队列中元素的个数。它的时间复杂度是O(1),因为PriorityQueue内部维护了一个变量来记录元素的个数,每次操作都会实时更新。 2. 当队列为空时,size方法返回0。通过与其他集合类的方法(如isEmpty方法)结合使用,可以判断PriorityQueue是否为空。 3. PriorityQueue中的元素是根据它们的优先级进行排列的,具有较高优先级的元素会在队列中的较低优先级元素之前被处理。优先级的比较可以通过元素自身的比较器(Comparator)来定义,或者根据元素的自然顺序进行比较。 4. PriorityQueue的插入和删除操作的时间复杂度为O(log n),其中n是队列中的元素个数。插入操作会根据元素的优先级将元素插入到合适的位置,删除操作会移除队列中的第一个元素(具有最高优先级)。 综上所述,PriorityQueue的size方法可以方便地用来获取队列中元素的个数。它对于判断队列是否为空以及对队列的容量进行限制判断非常有用。该方法的时间复杂度为O(1),并且与队列中元素的个数无关。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值