隊(duì)列和棧是數(shù)據(jù)結(jié)構(gòu)中常用的兩個(gè)操作,Java中也提供了相應(yīng)的API用來(lái)實(shí)現(xiàn)這兩個(gè)操作。隊(duì)列是一種先進(jìn)先出(FIFO)的數(shù)據(jù)結(jié)構(gòu),用于保存按照時(shí)間順序排列的元素。而棧是一種后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu),用于保存最后插入的元素。
在Java中,使用隊(duì)列和棧最常用的API是LinkedList類。LinkedList類實(shí)現(xiàn)了List接口,也實(shí)現(xiàn)了Deque接口,Deque接口又繼承了Queue接口。因此,LinkedList既可以用作隊(duì)列,也可以用作棧。
//使用LinkedList類創(chuàng)建一個(gè)隊(duì)列 LinkedListqueue = new LinkedList<>(); queue.offer(1); //入隊(duì) queue.offer(2); queue.offer(3); int first = queue.poll(); //出隊(duì) System.out.println(first); //1 //使用LinkedList類創(chuàng)建一個(gè)棧 LinkedList stack = new LinkedList<>(); stack.push(1); //壓入棧頂 stack.push(2); stack.push(3); int top = stack.pop(); //彈出棧頂 System.out.println(top); //3
除了LinkedList類之外,Java還提供了ArrayDeque類,可以用來(lái)實(shí)現(xiàn)雙端隊(duì)列。雙端隊(duì)列是具有隊(duì)列和棧的特性的數(shù)據(jù)結(jié)構(gòu),也就是說(shuō)既可以從隊(duì)尾插入元素,也可以從隊(duì)頭插入元素。
//使用ArrayDeque類創(chuàng)建一個(gè)雙端隊(duì)列 ArrayDequedeque = new ArrayDeque<>(); deque.offerLast(1); //從隊(duì)尾入隊(duì) deque.offerLast(2); deque.offerLast(3); deque.offerFirst(4); //從隊(duì)頭入隊(duì) int first = deque.pollFirst(); //從隊(duì)頭出隊(duì) int last = deque.pollLast(); //從隊(duì)尾出隊(duì) System.out.println(first + "," + last); //4,3
以上就是Java中實(shí)現(xiàn)隊(duì)列和棧的API介紹。開發(fā)者可以根據(jù)實(shí)際需求選擇合適的數(shù)據(jù)結(jié)構(gòu)和API來(lái)實(shí)現(xiàn)相應(yīng)的功能。