大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java實現堆棧的方法

Java實現堆棧的方法

更新時間:2022-12-14 11:20:55 來源:動力節點 瀏覽1762次

如何用 Java 自己實現堆棧——以四種不同的方式:

作為ArrayDeque的包裝器(在本文中)。

使用數組

使用鏈表

使用隊列

讓我們從一個界面開始……

棧接口

首先,我們創建一個Stack界面。它只包含堆棧應該提供的那些方法,即:

push()– 將元素添加到堆棧

pop()– 從棧頂移除元素

peek()– 查看頂部堆棧元素而不刪除它

isEmpty()– 檢查堆棧是否為空(此方法可選)

以下代碼顯示了接口(GitHub 存儲庫中的類Stack ):

public interface Stack<E> {
  void push(E item);
  E pop();
  E peek();
  boolean isEmpty();
}

此時決定將 for和pop()throw peek()aNoSuchElementException放在空堆棧上,就像Deque's add//方法所做的那樣。removeget

或者,也可以 return Optional。該決定取決于調用pop()和peek()在空堆棧上是異常(然后您應該拋出異常)或常規控制流(然后您應該返回一個Optional)的程度。

你不應該做的是返回null一個空堆棧。

使用 ArrayDeque 實現堆棧

我們的第一個實現包含一個圍繞(非線程安全的)雙端隊列實現的適配器ArrayDeque。適配器轉發堆棧方法如下:

Stack.push()→ArrayDeque.addFirst()

Stack.pop()→ArrayDeque.removeFirst()

Stack.peek()→ArrayDeque.getFirst()

Stack.isEmpty()→ArrayDeque.isEmpty()

首先,這是一個表示適配器模式的類圖:

這是適配器的實現(GitHub 存儲庫中的ArrayDequeStack類):

public class ArrayDequeStack<E> implements Stack<E> {
  private final Deque<E> deque = new ArrayDeque<>();
  @Override
  public void push(E item) {
    deque.addFirst(item);
  }
  @Override
  public E pop() {
    return deque.removeFirst();
  }
  @Override
  public E peek() {
    return deque.getFirst();
  }
  @Override
  public boolean isEmpty() {
    return deque.isEmpty();
  }
}

以下示例程序( GitHub 中的StackDemo類)顯示了該類的示例用法ArrayDequeStack。

設計的測試代碼可以毫不費力地處理額外的 Stack 實現(通過調用runDemo()其他Stack類的實例)。

public class StackDemo {
  public static void main(String[] args) {
    runDemo(new ArrayDequeStack<>());
  }
  private static void runDemo(Stack<Integer> stack) {
    System.out.println("-------- " + stack.getClass().getSimpleName() + " --------");
    stack.push(1);
    stack.push(2);
    stack.push(3);
    System.out.println("stack.peek() = " + stack.peek());
    System.out.println("stack.pop() = " + stack.pop());
    System.out.println("stack.pop() = " + stack.pop());
    System.out.println("stack.pop() = " + stack.pop());
    try {
      System.out.println("stack.pop() = " + stack.pop());
    } catch (Exception ex) {
      ex.printStackTrace(System.out);
    }
  }
}

通過上述介紹,相信大家對堆棧已經有所了解,如果大家對此比較感興趣,想了解更多相關知識,不妨來關注一下動力節點的Java堆棧教程,里面有更豐富的知識等著大家去學習,希望對大家能夠有所幫助哦。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产福利不卡视频在免费 | 美女羞羞视频网站 | 精品久久中文字幕有码 | 国产综合色在线视频区色吧图片 | 热99精品| 99久久久精品免费观看国产 | 在线欧美 | 神马影院午夜我不卡 | 亚洲一区二区福利视频 | 一国产大片在线观看 | 亚洲国产精品综合久久 | 国产日韩欧美在线观看不卡 | 亚洲韩精品欧美一区二区三区 | 久青草免费视频 | 国产精品免费观在线 | 香蕉综合网 | 国产精久久一区二区三区 | 野外一级毛片 | 久久久亚洲精品视频 | 亚洲黄色小视频 | 久青草国产高清在线视频 | 天天做天天添天天谢 | 桃色视频在线观看 | 成人夜色香网站在线观看 | 成人久久久观看免费毛片 | 99热成人精品国产免男男 | 九九热国产视频 | 国产99视频精品免视看7 | 久久国产精品视频 | 狠狠色噜噜狠狠狠狠色吗综合 | 一级一级毛片免费播放 | 国产乱码精品一区二区三区卡 | 97在线观免费视频观看 | 91在线短视频 | 亚欧洲精品在线视频免费观看 | 免费看一级毛片欧美 | 青青青国产观看免费视频 | 午夜禁片 | 欧美日韩亚洲国内综合网香蕉 | 日一区二区三区 | 黄色伊人 |