Java容器类源码学习-Stack(五)

mac2024-05-19  27

一、官方介绍

Stack类表示对象的后进先出(LIFO-In lastly,Out firstly)堆栈。它通过5个操作扩展了Vector类,这5个操作允许将一个Vector视为一个Stack。为基础的push和pop提供了操作,以及一个方法peek来获取Stack顶部,一个方法来测试是否栈是空的,和一个方法来判断某一项和stack的顶部距离。第一次创建Stack时,它不包含任何项。Deque接口及其实现提供了一组更完整、更一致的后进先出Stack操作,应该优先使用这些操作。例如: Deque<Integer> stack = new ArrayDeque<Integer>();

二、源码分析

package java.util; public class Stack<E> extends Vector<E> { /** * Creates an empty Stack. */ public Stack() {} /** * 将一个itempush到Stack的顶部 */ public E push(E item) { addElement(item); return item; } /** * 删除此Stack顶部的对象并将该对象作为此函数的值返回。 */ public synchronized E pop() { E obj; int len = size(); obj = peek(); removeElementAt(len - 1); return obj; } /** * 查看此Stack顶部的对象,但不将其从Stack中删除。 */ public synchronized E peek() { int len = size(); if (len == 0) throw new EmptyStackException(); return elementAt(len - 1); } /** * Tests if this stack is empty. */ public boolean empty() { return size() == 0; } /** * 若stack种有这个元素,返回离stack顶部最近的元素距离顶部的距离,如果没有 返回-1 */ 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; }
最新回复(0)