Java中的Deque和Queue都是用來存儲和操作一組對象的容器。
Deque是雙端隊列(Double Ended Queue)的縮寫,可以在隊列的兩端添加或移除元素,既可以當作隊列使用,也可以當作棧使用。Deque接口繼承自Queue接口,并在其基礎上增加了雙端操作方法,即在隊首和隊尾都可以添加或移除元素。
Deque<String> deque = new LinkedList<>(); deque.addLast("last"); deque.addFirst("first"); deque.offerLast("offerLast"); deque.offerFirst("offerFirst"); System.out.println(deque.pollFirst()); System.out.println(deque.pollLast()); System.out.println(deque.peekFirst()); System.out.println(deque.peekLast());
Queue是隊列的意思,其主要操作是將元素添加到末尾并從開頭移除元素。Queue接口有兩個重要的實現類:LinkedList和PriorityQueue。
LinkedList除了實現Deque接口,還實現了Queue接口,因此可以當作普通隊列使用。與Deque不同的是, LinkedList只能在隊頭添加和移除元素。
Queue<String> queue = new LinkedList<>(); queue.add("add"); queue.offer("offer"); System.out.println(queue.poll()); System.out.println(queue.peek());
PriorityQueue是優先級隊列,是通過二叉堆實現的。在PriorityQueue中,每次加入元素時都會按照元素的大小自動排序。因此,在使用PriorityQueue時,需要讓元素實現Comparable接口或者使用Comparator對象來指定排序方式。
Queue<Integer> queue = new PriorityQueue<>(); queue.add(2); queue.add(1); queue.add(3); System.out.println(queue.poll()); System.out.println(queue.peek());