<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          刷leetcode時(shí),重新認(rèn)識LinkedList實(shí)現(xiàn)棧、隊(duì)列或者雙端隊(duì)列

          共 2696字,需瀏覽 6分鐘

           ·

          2021-01-28 21:47

          如果想進(jìn)大廠免不了要leetcode,而leetcode時(shí)免不了很多題跟棧,隊(duì)列有關(guān),重新認(rèn)識一下LinkedList也許能在不時(shí)之需時(shí),助你進(jìn)入大廠。LinkedList實(shí)現(xiàn)了Deque和Queue接口,可以按照隊(duì)列、棧和雙端隊(duì)列的方式進(jìn)行操作。


          0x01:Queue接口

          Queue里面的方法,Queue擴(kuò)展了Collection,它的主要操作有三個(gè)功能操作。每個(gè)操作有2個(gè)方法,針對隊(duì)列長度是否受限制,對應(yīng)是否拋異常。有些隊(duì)列的是有長度限制的,本例的LinkedList實(shí)現(xiàn)queue沒長度限制。

          • 在尾部添加元素 (add, offer):add()會在長度不夠時(shí)拋出IllegalStateException異常;offer()則不會,只返回false;

          • 查看頭部元素 (element, peek):返回頭部元素,但不改變隊(duì)列。element()會在沒元素時(shí)拋出NoSuchElementException異常,而peek()返回null;

          • 刪除頭部元素 (remove, poll):返回頭部元素,并且從隊(duì)列中刪除。remove()會在沒元素時(shí)拋出NoSuchElementException異常;? 而poll()返回null;?

          LinkedList模擬隊(duì)列

          import?java.util.LinkedList;
          import?java.util.Queue;
          /**
          *?用LinkedList模擬隊(duì)列,因?yàn)殒湵砩瞄L插入和刪除
          */

          public?class?QueueDemo{
          ????public?static?void?main(String?[]?args)?{?
          ????????//做劍指offer遇見過這個(gè)數(shù)結(jié)
          ????????Queue?queue?=?new?LinkedList();
          ????????//追加元素
          ????????queue.add("zero");
          ????????queue.offer("one");
          ????????queue.offer("two");
          ????????queue.offer("three");
          ????????queue.offer("four");
          ????????System.out.println(queue);//[zero,?one,?two,?three,?four]
          ????????//從隊(duì)首取出元素并刪除
          ????????System.out.println(queue.poll());?//?zero
          ????????System.out.println(queue.remove());?//?one
          ????????System.out.println(queue);?//[two,?three,?four]
          ????????//從隊(duì)首取出元素但是不刪除
          ????????String?peek?=?queue.peek();
          ????????System.out.println(peek);?//?two
          ????????//遍歷隊(duì)列,這里要注意,每次取完元素后都會刪除,整個(gè)
          ????????//隊(duì)列會變短,所以只需要判斷隊(duì)列的大小即可
          ????????while(queue.size()?>?0)?{
          ????????????System.out.println(queue.poll());
          ????????}//two?three?four
          ????}
          }



          0x02:Deque接口

          Java中有一個(gè)類Stack,用于表示棧,但該類已經(jīng)過時(shí)了。Java中沒有單獨(dú)的棧接口,棧相關(guān)方法包括在了表示雙端隊(duì)列的接口Deque中,主要有三個(gè)方法。

          • push()表示入棧,在頭部添加元素,棧的空間可能是有限的,如果棧滿了,push會拋出異常IllegalStateException;

          • pop()表示出棧,返回頭部元素,并且從棧中刪除,如果棧為空,會拋出NoSuchElementException異常;

          • peek()查看棧頭部元素,不修改棧,如果棧為空,返回null;

          棧和隊(duì)列只是雙端隊(duì)列的特殊情況,它們的方法都可以使用雙端隊(duì)列的方法替代,使用不同的名稱和方法,概念上更為清晰。具體參考Deque接口里面的方法。

          LinkedList模擬棧

          import?java.util.Deque;
          import?java.util.LinkedList;

          public?class?StackDemo{
          ????public?static?void?main(String[]?args)?{
          ????????/*模擬棧,這是從頭開始進(jìn)來的*/
          ????????Deque?deque?=?new?LinkedList();
          ????????/*Pushes?an?element?onto?the?stack?at?the?head?of?this?dequeue?*/
          ????????deque.push("a");
          ????????deque.push("b");
          ????????deque.push("c");
          ????????System.out.println(deque);?//[c,?b,?a]
          ????????//獲取棧首元素后,元素不會出棧
          ????????System.out.println(deque.peek());//c
          ????????while(deque.size()?>?0)?{
          ????????????//獲取棧首元素后,元素將會出棧
          ????????????System.out.println(deque.pop());//c?b?a
          ????????}
          ????????System.out.println(deque);//[]

          ????????/*模擬棧*/
          ????????deque.offerLast("a");
          ????????deque.offerLast("b");
          ????????deque.offerLast("c");//?[a,?b,?c]
          ????????while(!deque.isEmpty()){
          ????????????System.out.println(deque.pollLast());
          ????????}
          ????}???//?先輸出c再b最后a
          }

          喜歡,在看

          瀏覽 37
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩精品一区二区三区四虎影视 | 国产午夜精品一区二区三区四区 | 爆操无码 | 大香蕉尹人视频 | 大香蕉这里只有精品视频 |