Java集合篇:Stack
生活随笔
收集整理的這篇文章主要介紹了
Java集合篇:Stack
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在Java中Stack類表示后進(jìn)先出(LIFO)的對(duì)象堆棧。棧是一種非常常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),它采用典型的先進(jìn)后出的操作方式完成的。每一個(gè)棧都包含一個(gè)棧頂,每次出棧是將棧頂?shù)臄?shù)據(jù)取出,如下:
?Stack通過(guò)五個(gè)操作對(duì)Vector進(jìn)行擴(kuò)展,允許將向量視為堆棧。這個(gè)五個(gè)操作如下:
| 操作 | 操作 |
| empty() | 測(cè)試堆棧是否為空。 |
| peek() | 查看堆棧頂部的對(duì)象,但不從堆棧中移除它。 |
| pop() | 移除堆棧頂部的對(duì)象,并作為此函數(shù)的值返回該對(duì)象。 |
| push(E item) | 把項(xiàng)壓入堆棧頂部。 |
| search(Object o) | 返回對(duì)象在堆棧中的位置,以 1 為基數(shù)。 |
??Stack繼承Vector,他對(duì)Vector進(jìn)行了簡(jiǎn)單的擴(kuò)展:
public class Stack<E> extends Vector<E>?Stack的實(shí)現(xiàn)非常簡(jiǎn)單,僅有一個(gè)構(gòu)造方法,五個(gè)實(shí)現(xiàn)方法(從Vector繼承而來(lái)的方法不算與其中),同時(shí)其實(shí)現(xiàn)的源碼非常簡(jiǎn)單:
/*** 構(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;}注:Stack類的設(shè)計(jì)是有缺陷的,在《Java編程思想》中明確提出了不應(yīng)該使用Stack類,而是使用LinkedList該構(gòu)建棧。
?
原文地址:https://blog.csdn.net/chenssy/article/details/37756539
?
總結(jié)
以上是生活随笔為你收集整理的Java集合篇:Stack的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java基础篇:Iterator迭代器
- 下一篇: Java集合篇:ArrayList详解