Deque接口是Queue接口的子接口,它代表一个双端队列,该队列允许从两端来操作队列中的元素。Deque不仅可以当成双端队列使用,而且可以当成栈来使用。
ArrayDeque集合是Deque接口的实现类,它是一个基于数组的双端队列,创建Deque时同样可以指定一个numElements参数,该参数用于指定Object[]数组的长度;如果不指定该参数,Deque底层数组长度为16。
public void testStack() {
ArrayDeque<String> stack = new ArrayDeque<String>();
stack.push("The Times");
stack.push("Economics");
stack.push("the New York Times");
//读取第一个元素,但不是出栈
System.out.println(stack.peek());
System.out.println(stack);
//直接取第一个元素出栈
System.out.println(stack.pop());
System.out.println(stack);
}
the New York Times
[the New York Times, Economics, The Times]
the New York Times
[Economics, The Times]
public void testQueue() {
ArrayDeque<String> queue = new ArrayDeque<String>();
queue.offer("The Times");
queue.offer("Economics");
queue.offer("the New York Times");
//读队列第一个元素,但是不出队列
System.out.println(queue.peek());
System.out.println(queue);
//读并且取出第一个元素
System.out.println(queue.poll());
System.out.println(queue);
}
The Times
[The Times, Economics, the New York Times]
The Times
[Economics, the New York Times]
PriorityQueue是优先级队列,优先级可由new Comparator定义。
public void testPriorityQueue() {
PriorityQueue<String> priorityQueue = new PriorityQueue<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.length() - o2.length();
}
});
priorityQueue.offer("student's book");
priorityQueue.offer("teachers");
priorityQueue.offer("employees");
priorityQueue.offer("manager");
while(!priorityQueue.isEmpty()) {
System.out.println(priorityQueue.poll());
}
}
manager
teachers
employees
student's book