在本教程中,我們將學(xué)習(xí)Deque接口,如何使用它及其方法。
Java集合框架的Deque接口提供了雙端隊(duì)列(Deque)的功能。它繼承了Queue接口。
在常規(guī)隊(duì)列中,元素是從后面添加的,而從前面刪除的。但是,在雙端隊(duì)列中,我們可以從前后插入和刪除元素。
為了使用Deque接口的功能,我們需要使用實(shí)現(xiàn)接口的類:
在Java中,我們必須導(dǎo)入要使用Deque的包 java.util.Deque 。
Deque<String> animal1 = new ArrayDeque<>(); Deque<String> animal2 = new LinkedList<>();
在這里,我們分別創(chuàng)建了類ArrayDeque和LinkedList的對(duì)象animal1和animal2。 這些對(duì)象可以使用Deque接口的功能。
由于Deque繼承了Queue接口,因此它繼承了Queue接口的所有方法。
除了Queue接口中可用的方法之外,Deque界面還包括以下方法:
addFirst() - 在雙端隊(duì)列的開頭添加指定的元素。如果雙端隊(duì)列已滿,則引發(fā)異常。
addLast() - 在雙端隊(duì)列的末尾添加指定的元素。如果雙端隊(duì)列已滿,則引發(fā)異常。
offerFirst() - 在雙端隊(duì)列的開頭添加指定的元素。如果雙端隊(duì)列已滿,則返回false。
offerLast() - 在雙端隊(duì)列的末尾添加指定的元素。如果雙端隊(duì)列已滿,則返回false。
getFirst() - 返回雙端隊(duì)列的第一個(gè)元素。如果雙端隊(duì)列為空,則引發(fā)異常。
getLast() - 返回雙端隊(duì)列的最后一個(gè)元素。如果雙端隊(duì)列為空,則引發(fā)異常。
peekFirst() - 返回雙端隊(duì)列的第一個(gè)元素。如果雙端隊(duì)列為空,則返回null。
peekLast() - 返回雙端隊(duì)列的最后一個(gè)元素。如果雙端隊(duì)列為空,則返回null。
removeFirst() - 返回并刪除雙端隊(duì)列的第一個(gè)元素。如果雙端隊(duì)列為空,則引發(fā)異常。
removeLast() - 返回并刪除雙端隊(duì)列的最后一個(gè)元素。如果雙端隊(duì)列為空,則引發(fā)異常。
pollFirst() - 返回并刪除雙端隊(duì)列的第一個(gè)元素。如果雙端隊(duì)列為空,則返回null。
pollLast() - 返回并刪除雙端隊(duì)列的最后一個(gè)元素。如果雙端隊(duì)列為空,則返回null。
Java Collections框架的Stack類提供了堆棧的實(shí)現(xiàn)。
但是,建議Deque用作堆棧而不是Stack類。這是因?yàn)镾tack的方法是同步的。
以下是Deque接口提供的用于實(shí)現(xiàn)堆棧的方法:
push() - 在雙端隊(duì)列的開頭添加元素
pop() - 從雙端隊(duì)列的開頭刪除元素
peek() - 從雙端隊(duì)列的開頭返回一個(gè)元素
import java.util.Deque; import java.util.ArrayDeque; class Main { public static void main(String[] args) { // 使用ArrayDeque類創(chuàng)建Deque Deque<Integer> numbers = new ArrayDeque<>(); //添加元素到Deque numbers.offer(1); numbers.offerLast(2); numbers.offerFirst(3); System.out.println("Deque: " + numbers); //訪問Deque的元素 int firstElement = numbers.peekFirst(); System.out.println("第一個(gè)元素: " + firstElement); int lastElement = numbers.peekLast(); System.out.println("最后一個(gè)元素: " + lastElement); //從Deque 移除元素 int removedNumber1 = numbers.pollFirst(); System.out.println("移除第一個(gè)元素: " + removedNumber1); int removedNumber2 = numbers.pollLast(); System.out.println("移除最后一個(gè)元素: " + removedNumber2); System.out.println("更新后的Deque: " + numbers); } }
輸出結(jié)果
Deque: [3, 1, 2] 第一個(gè)元素: 3 最后一個(gè)元素: 2 移除第一個(gè)元素: 3 移除最后一個(gè)元素: 2 更新后的Deque: [1]
要了解更多信息,請(qǐng)?jiān)L問Java ArrayDeque。