概要
我們提供的服務(wù)有:成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、羅江ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢(xún)和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的羅江網(wǎng)站制作公司學(xué)完Vector了之后,接下來(lái)我們開(kāi)始學(xué)習(xí)Stack。Stack很簡(jiǎn)單,它繼承于Vector。學(xué)習(xí)方式還是和之前一樣,先對(duì)Stack有個(gè)整體認(rèn)識(shí),然后再學(xué)習(xí)它的源碼;最后再通過(guò)實(shí)例來(lái)學(xué)會(huì)使用它。
第1部分 Stack介紹 Stack簡(jiǎn)介Stack是棧。它的特性是:先進(jìn)后出(FILO, First In Last Out)。
java工具包中的Stack是繼承于Vector(矢量隊(duì)列)的,由于Vector是通過(guò)數(shù)組實(shí)現(xiàn)的,這就意味著,Stack也是通過(guò)數(shù)組實(shí)現(xiàn)的,而非鏈表。當(dāng)然,我們也可以將LinkedList當(dāng)作棧來(lái)使用!在“Java 集合系列06之 Vector詳細(xì)介紹(源碼解析)和使用示例”中,已經(jīng)詳細(xì)介紹過(guò)Vector的數(shù)據(jù)結(jié)構(gòu),這里就不再對(duì)Stack的數(shù)據(jù)結(jié)構(gòu)進(jìn)行說(shuō)明了。
Stack的繼承關(guān)系java.lang.Object
↳ java.util.AbstractCollection<E>
↳ java.util.AbstractList<E>
↳ java.util.Vector<E>
↳ java.util.Stack<E>
public class Stack<E> extends Vector<E> {}
Stack和Collection的關(guān)系如下圖:
Stack的構(gòu)造函數(shù)Stack只有一個(gè)默認(rèn)構(gòu)造函數(shù),如下:
Stack()
Stack的API
Stack是棧,它常用的API如下:
boolean empty()
synchronized E peek()
synchronized E pop()
E push(E object)
synchronized int search(Object o)
由于Stack和繼承于Vector,因此它也包含Vector中的全部API。
第2部分 Stack源碼解析(基于JDK1.6.0_45)Stack的源碼非常簡(jiǎn)單,下面我們對(duì)它進(jìn)行學(xué)習(xí)。
package java.util; public class Stack<E> extends Vector<E> { // 版本ID。這個(gè)用于版本升級(jí)控制,這里不須理會(huì)! private static final long serialVersionUID = 1224463164541339165L; // 構(gòu)造函數(shù) public Stack() { } // push函數(shù):將元素存入棧頂 public E push(E item) { // 將元素存入棧頂。 // addElement()的實(shí)現(xiàn)在Vector.java中 addElement(item); return item; } // pop函數(shù):返回棧頂元素,并將其從棧中刪除 public synchronized E pop() { E obj; int len = size(); obj = peek(); // 刪除棧頂元素,removeElementAt()的實(shí)現(xiàn)在Vector.java中 removeElementAt(len - 1); return obj; } // peek函數(shù):返回棧頂元素,不執(zhí)行刪除操作 public synchronized E peek() { int len = size(); if (len == 0) throw new EmptyStackException(); // 返回棧頂元素,elementAt()具體實(shí)現(xiàn)在Vector.java中 return elementAt(len - 1); } // 棧是否為空 public boolean empty() { return size() == 0; } // 查找“元素o”在棧中的位置:由棧底向棧頂方向數(shù) public synchronized int search(Object o) { // 獲取元素索引,elementAt()具體實(shí)現(xiàn)在Vector.java中 int i = lastIndexOf(o); if (i >= 0) { return size() - i; } return -1; } }
本文名稱(chēng):Java集合Stack源碼詳解-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://vcdvsql.cn/article18/didhgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、ChatGPT、外貿(mào)網(wǎng)站建設(shè)、云服務(wù)器、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容