Java集合Stack源碼詳解-創(chuàng)新互聯(lián)

概要

我們提供的服務(wù)有:成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、羅江ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的羅江網(wǎng)站制作公司

學(xué)完Vector了之后,接下來(lái)我們開始學(xué)習(xí)Stack。Stack很簡(jiǎn)單,它繼承于Vector。學(xué)習(xí)方式還是和之前一樣,先對(duì)Stack有個(gè)整體認(rèn)識(shí),然后再學(xué)習(xí)它的源碼;最后再通過實(shí)例來(lái)學(xué)會(huì)使用它。

第1部分 Stack介紹 Stack簡(jiǎn)介

Stack是棧。它的特性是:先進(jìn)后出(FILO, First In Last Out)。

java工具包中的Stack是繼承于Vector(矢量隊(duì)列)的,由于Vector是通過數(shù)組實(shí)現(xiàn)的,這就意味著,Stack也是通過數(shù)組實(shí)現(xiàn)的,而非鏈表。當(dāng)然,我們也可以將LinkedList當(dāng)作棧來(lái)使用!在“Java 集合系列06之 Vector詳細(xì)介紹(源碼解析)和使用示例”中,已經(jīng)詳細(xì)介紹過Vector的數(shù)據(jù)結(jié)構(gòu),這里就不再對(duì)Stack的數(shù)據(jù)結(jié)構(gòu)進(jìn)行說明了。

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

本文名稱:Java集合Stack源碼詳解-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://bm7419.com/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)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化