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

專(zhuān)注Java教育14年 全國(guó)咨詢(xún)/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java學(xué)習(xí) Java實(shí)現(xiàn)堆棧的方法

Java實(shí)現(xiàn)堆棧的方法

更新時(shí)間:2022-12-14 11:20:55 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1901次

如何用 Java 自己實(shí)現(xiàn)堆棧——以四種不同的方式:

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

使用數(shù)組

使用鏈表

使用隊(duì)列

讓我們從一個(gè)界面開(kāi)始……

棧接口

首先,我們創(chuàng)建一個(gè)Stack界面。它只包含堆棧應(yīng)該提供的那些方法,即:

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

pop()– 從棧頂移除元素

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

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

以下代碼顯示了接口(GitHub 存儲(chǔ)庫(kù)中的類(lèi)Stack ):

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

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

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

你不應(yīng)該做的是返回null一個(gè)空堆棧。

使用 ArrayDeque 實(shí)現(xiàn)堆棧

我們的第一個(gè)實(shí)現(xiàn)包含一個(gè)圍繞(非線程安全的)雙端隊(duì)列實(shí)現(xiàn)的適配器ArrayDeque。適配器轉(zhuǎn)發(fā)堆棧方法如下:

Stack.push()→ArrayDeque.addFirst()

Stack.pop()→ArrayDeque.removeFirst()

Stack.peek()→ArrayDeque.getFirst()

Stack.isEmpty()→ArrayDeque.isEmpty()

首先,這是一個(gè)表示適配器模式的類(lèi)圖:

這是適配器的實(shí)現(xiàn)(GitHub 存儲(chǔ)庫(kù)中的ArrayDequeStack類(lèi)):

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類(lèi))顯示了該類(lèi)的示例用法ArrayDequeStack。

設(shè)計(jì)的測(cè)試代碼可以毫不費(fèi)力地處理額外的 Stack 實(shí)現(xiàn)(通過(guò)調(diào)用runDemo()其他Stack類(lèi)的實(shí)例)。

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);
    }
  }
}

通過(guò)上述介紹,相信大家對(duì)堆棧已經(jīng)有所了解,如果大家對(duì)此比較感興趣,想了解更多相關(guān)知識(shí),不妨來(lái)關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java堆棧教程,里面有更豐富的知識(shí)等著大家去學(xué)習(xí),希望對(duì)大家能夠有所幫助哦。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 久久久久精彩视频 | 中文字幕在线看视频一区二区三区 | 久久网站免费 | 精品在线播放视频 | 欧美在线精品一区二区三区 | 久久精品国产亚洲高清 | 国产精品久久视频 | 三级成人做爰视频 | 手机在线一区二区三区 | 日韩免费视频一区二区 | 在线欧美国产 | 奇米影视第四色在线 | 亚洲日本视频 | 欧美成人免费看片一区 | 老司机午夜精品视频在线观看免费 | 四虎国产精品永久免费网址 | 色综合久久综精品 | 中国特黄特级真人毛片 | 卡通动漫亚洲综合 | 国产精品青青青高清在线密亚 | 狠狠大日本亚洲香蕉亚洲 | 欧美美妇性较大毛片 | 亚洲国产成a人v在线观看 | 综合久久久久6亚洲综合 | 91无限资源 | 一区二区三区免费视频 www | 国产日韩欧美一区二区三区综合 | 欧美人成人亚洲专区中文字幕 | 看全色黄大色大片免费视频 | 特级毛片免费视频播放 | 国产日韩欧美亚洲综合首页 | 久久亚洲综合伊人 | 久久99精品久久久久久牛牛影视 | 91久久精品 | 四虎在线免费观看 | 奇米第四影视 | 成年女人a毛片免费视频 | 国产亚洲精品久久yy5099 | 欧美精品午夜毛片免费看 | 久久久人体 | 一级做受视频免费是看美女 |