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