关于Java PriorityQueue

本文探讨了优先队列中迭代器的访问顺序,并对比了offer方法和add方法的区别。通过一个具体的Java示例程序展示了如何使用优先队列存储日期并按优先级排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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));
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值