摘要:中的棧中的是早期的遺留類,已經不推薦使用,現在只是為了兼容遺留代碼而保留遺留實現如下面的代碼所示,中的實現是基于動態數組實現的,而同樣是一個被廢棄的類。
Java中的棧
Java中的Stack是早期的遺留類,Sun/Oracle已經不推薦使用,現在只是為了兼容遺留代碼而保留.
遺留實現如下面的代碼所示,java.util.Stack中的實現是基于動態數組實現的,而Vector同樣是一個被廢棄的類。
個人看來,這個實現有兩個問題
基于Vector,需要同步因而性能損失很嚴重
基于數組而非鏈表,棧很大時需要多次擴容,帶來不必要的性能損失
public class Stack自己簡單的封裝extends Vector { /** * Creates an empty Stack. */ public Stack() { } public E push(E item) { addElement(item); return item; } public synchronized E pop() { E obj; int len = size(); obj = peek(); removeElementAt(len - 1); return obj; } public synchronized E peek() { int len = size(); if (len == 0) throw new EmptyStackException(); return elementAt(len - 1); } public boolean empty() { return size() == 0; } public synchronized int search(Object o) { int i = lastIndexOf(o); if (i >= 0) { return size() - i; } return -1; } /** use serialVersionUID from JDK 1.0.2 for interoperability */ private static final long serialVersionUID = 1224463164541339165L; }
下面是基于LinkedList封裝的Stack
這里的棧是一個裝飾器。
import java.util.LinkedList; import java.util.NoSuchElementException; public class Stack{ private LinkedList stack; Stack() { stack = new LinkedList<>(); } public void push(T o) { stack.add(o); } public T pop() { if (size() <= 0) { throw new NoSuchElementException("Stack is Empty."); } return stack.removeLast(); } public T peek() { if (size() <= 0) { throw new NoSuchElementException("Stack is Empty."); } return stack.getLast(); } public boolean empty() { return stack.size() == 0; } public int size() { return stack.size(); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/73986.html
摘要:在本文,筆者將與大家概覽的體系結構與工作方式。將第條和第條指令分別是將兩個局部變量入棧,然后相加。最后一條指令是,這條指令執行完后當前的這個方法對應的這些部件會被回收,局部變量區的所有值將全部釋放,寄存器會被銷魂,在棧中與這個方 Java之所以號稱一次編譯,到處運行,主要原因是JVM屏蔽了各個計算機平臺相關的軟件(大多指系統)或者硬件之間的差異,使得與平臺相關的耦合統一由JVM提供者來...
摘要:虛擬機包括一套字節碼指令集一組寄存器一個棧一個垃圾回收堆和一個存儲方法域。而使用虛擬機是實現這一特點的關鍵。虛擬機在執行字節碼時,把字節碼解釋成具體平臺上的機器指令執行。此內存區域是唯一一個在虛擬機規范中沒有規定任何情況的區域。 1、 什么是JVM? JVM是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用于計算設備的規范,它是一個虛構出來的計算機,...
摘要:內存模型首先介紹下程序具體執行的過程源代碼文件后綴會被編譯器編譯為字節碼文件后綴由中的類加載器加載各個類的字節碼文件,加載完畢之后,交由執行引擎執行在整個程序執行過程中,會用一段空間來存儲程序執行期間需要用到的數據和相關信息,這段空間一般被 [TOC] JVM內存模型 首先介紹下Java程序具體執行的過程: Java源代碼文件(.java后綴)會被Java編譯器編譯為字節碼文件(....
摘要:是那些可能在虛擬機正常運行期間拋出的異常的超類。運行時異常定義及其子類都被稱為運行時異常。對于語言中的關鍵字和,虛擬機中并沒有特殊的字節碼指令去支持它們,都是通過編譯器生成字節碼片段以及不同的異常處理器來實現。 前言 在一些傳統的編程語言,如C語言中,并沒有專門處理異常的機制,程序員通常用方法的特定返回值來表示異常情況,并且程序的正常流程和異常流程都采用同樣的流程控制語句。Java語言...
閱讀 3475·2023-04-26 02:48
閱讀 1472·2021-10-11 10:57
閱讀 2497·2021-09-23 11:35
閱讀 1204·2021-09-06 15:02
閱讀 3302·2019-08-30 15:54
閱讀 1619·2019-08-30 15:44
閱讀 887·2019-08-30 15:44
閱讀 994·2019-08-30 12:52