成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

Java中的棧

henry14 / 1558人閱讀

摘要:中的棧中的是早期的遺留類(lèi),已經(jīng)不推薦使用,現(xiàn)在只是為了兼容遺留代碼而保留遺留實(shí)現(xiàn)如下面的代碼所示,中的實(shí)現(xiàn)是基于動(dòng)態(tài)數(shù)組實(shí)現(xiàn)的,而同樣是一個(gè)被廢棄的類(lèi)。

Java中的棧

Java中的Stack是早期的遺留類(lèi),Sun/Oracle已經(jīng)不推薦使用,現(xiàn)在只是為了兼容遺留代碼而保留.

遺留實(shí)現(xiàn)

如下面的代碼所示,java.util.Stack中的實(shí)現(xiàn)是基于動(dòng)態(tài)數(shù)組實(shí)現(xiàn)的,而Vector同樣是一個(gè)被廢棄的類(lèi)。

個(gè)人看來(lái),這個(gè)實(shí)現(xiàn)有兩個(gè)問(wèn)題

基于Vector,需要同步因而性能損失很?chē)?yán)重

基于數(shù)組而非鏈表,棧很大時(shí)需要多次擴(kuò)容,帶來(lái)不必要的性能損失

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;
}
自己簡(jiǎn)單的封裝

下面是基于LinkedList封裝的Stack

這里的棧是一個(gè)裝飾器。

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/73986.html

相關(guān)文章

  • java的棧

    摘要:對(duì)于執(zhí)行引擎來(lái)說(shuō),在活動(dòng)線程中,只有位于棧頂?shù)臈攀亲钣行У姆Q(chēng)為當(dāng)前棧幀與這個(gè)棧幀相關(guān)聯(lián)的方法稱(chēng)為當(dāng)前方法。執(zhí)行引擎運(yùn)行的所有的字節(jié)碼指令都只針對(duì)當(dāng)前棧幀進(jìn)行操作。 showImg(https://segmentfault.com/img/bVbvueY?w=1600&h=800); 棧幀數(shù)據(jù)結(jié)構(gòu) 棧幀(Stack Frame)是用來(lái)支持虛擬機(jī)進(jìn)行方法調(diào)用和方法執(zhí)行的數(shù)據(jù)結(jié)構(gòu),它是虛...

    jeyhan 評(píng)論0 收藏0
  • JVM體系結(jié)構(gòu)與工作方式概覽

    摘要:在本文,筆者將與大家概覽的體系結(jié)構(gòu)與工作方式。將第條和第條指令分別是將兩個(gè)局部變量入棧,然后相加。最后一條指令是,這條指令執(zhí)行完后當(dāng)前的這個(gè)方法對(duì)應(yīng)的這些部件會(huì)被回收,局部變量區(qū)的所有值將全部釋放,寄存器會(huì)被銷(xiāo)魂,在棧中與這個(gè)方 Java之所以號(hào)稱(chēng)一次編譯,到處運(yùn)行,主要原因是JVM屏蔽了各個(gè)計(jì)算機(jī)平臺(tái)相關(guān)的軟件(大多指系統(tǒng))或者硬件之間的差異,使得與平臺(tái)相關(guān)的耦合統(tǒng)一由JVM提供者來(lái)...

    suosuopuo 評(píng)論0 收藏0
  • JVM虛擬機(jī)詳解

    摘要:虛擬機(jī)包括一套字節(jié)碼指令集一組寄存器一個(gè)棧一個(gè)垃圾回收堆和一個(gè)存儲(chǔ)方法域。而使用虛擬機(jī)是實(shí)現(xiàn)這一特點(diǎn)的關(guān)鍵。虛擬機(jī)在執(zhí)行字節(jié)碼時(shí),把字節(jié)碼解釋成具體平臺(tái)上的機(jī)器指令執(zhí)行。此內(nèi)存區(qū)域是唯一一個(gè)在虛擬機(jī)規(guī)范中沒(méi)有規(guī)定任何情況的區(qū)域。 1、 什么是JVM?   JVM是Java Virtual Machine(Java虛擬機(jī))的縮寫(xiě),JVM是一種用于計(jì)算設(shè)備的規(guī)范,它是一個(gè)虛構(gòu)出來(lái)的計(jì)算機(jī),...

    rottengeek 評(píng)論0 收藏0
  • Java性能優(yōu)化之JVM內(nèi)存模型

    摘要:內(nèi)存模型首先介紹下程序具體執(zhí)行的過(guò)程源代碼文件后綴會(huì)被編譯器編譯為字節(jié)碼文件后綴由中的類(lèi)加載器加載各個(gè)類(lèi)的字節(jié)碼文件,加載完畢之后,交由執(zhí)行引擎執(zhí)行在整個(gè)程序執(zhí)行過(guò)程中,會(huì)用一段空間來(lái)存儲(chǔ)程序執(zhí)行期間需要用到的數(shù)據(jù)和相關(guān)信息,這段空間一般被 [TOC] JVM內(nèi)存模型 首先介紹下Java程序具體執(zhí)行的過(guò)程: Java源代碼文件(.java后綴)會(huì)被Java編譯器編譯為字節(jié)碼文件(....

    SQC 評(píng)論0 收藏0
  • 聊聊Java的異常機(jī)制及實(shí)現(xiàn)

    摘要:是那些可能在虛擬機(jī)正常運(yùn)行期間拋出的異常的超類(lèi)。運(yùn)行時(shí)異常定義及其子類(lèi)都被稱(chēng)為運(yùn)行時(shí)異常。對(duì)于語(yǔ)言中的關(guān)鍵字和,虛擬機(jī)中并沒(méi)有特殊的字節(jié)碼指令去支持它們,都是通過(guò)編譯器生成字節(jié)碼片段以及不同的異常處理器來(lái)實(shí)現(xiàn)。 前言 在一些傳統(tǒng)的編程語(yǔ)言,如C語(yǔ)言中,并沒(méi)有專(zhuān)門(mén)處理異常的機(jī)制,程序員通常用方法的特定返回值來(lái)表示異常情況,并且程序的正常流程和異常流程都采用同樣的流程控制語(yǔ)句。Java語(yǔ)言...

    Towers 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<