Java 6中引入了Deque接口,ArrayDeque和LinkedList类实现了这个接口。这两个类都可以提供双端队列,其大小可以根据需要扩展。
java.util.Queue<E>
- boolean add(E element)
- boolean offer(E element)
如果队列没有满,将给定的元素添加到这个队列的队尾并返回true。如果队列已满,第一个方法将抛出一个IllegalStateException,第二个方法返回false; - E remove()
- E poll()
假如队列不为空,删除并返回这个队列队头的元素。如果队列是空的,第一个方法抛出NoSuchException,而第二个方法返回null。 - E element()
- E peek()
如果队列不为空,返回这个队列队头的元素,但不删除。如果队列空,第一个方法将抛出NoSuchElementException,而第二个方法返回null。
java.util.ArrayDeque
- ArrayDeque()
- ArrayDeque(int initialCapacity)
用初始容量16或给定的初始容量构造一个无限定双端队列。
java.util.PriorityQueue
- PriorityQueue()
- PriorityQueue(int initialCapacity)
构造一个存放Comparable对象的优先队列。 - PriorityQueue(int initialCapacity,Comparator<? super E> c)
构造一个优先队列,并使用指定的比较器对元素进行排序。
//自定义比较器,降序排列
static Comparator<Integer> cmp = new Comparator<Integer>() {
public int compare(Integer e1, Integer e2) {
return e2 - e1;
}
};
public static void main(String[] args) {
//不用比较器,默认升序排列
Queue<Integer> q = new PriorityQueue<>();
q.add(3);
q.add(2);
q.add(4);
while(!q.isEmpty())
{
System.out.print(q.poll()+" ");
}
/**
* 输出结果
* 2 3 4
*/
//使用自定义比较器,降序排列
Queue<Integer> qq = new PriorityQueue<>(cmp);
qq.add(3);
qq.add(2);
qq.add(4);
while(!qq.isEmpty())
{
System.out.print(qq.poll()+" ");
}
/**
* 输出结果
* 4 3 2
*/
}