学习JDK8源码之--Stack

1. Stack简介

  Stack是集合中对数据结构栈的一种实现,栈的原则是先进先后出,与队列相反(先进先出)。Stack是继承自Vector的,意味着它也是由数组实现的线程安全的,不考虑线程安全的情况下完全可以用LinkedList当做栈来使用。

2. Stack实现

  Stack的实现很简单,核心参数和方法都继承自Vector,因为它可以调用Vector的全部API。

  Stack实际上也是通过数组去实现的。 

  执行push时(即,将元素推入栈中),是通过将元素追加的数组的末尾中。

  执行peek时(即,取出栈顶元素,不执行删除),是返回数组末尾的元素。

  执行pop时(即,取出栈顶元素,并将该元素从栈中删除),是取出数组末尾的元素,然后将该元素从数组中删除。

public class Stack<E> extends Vector<E> {
    private static final long serialVersionUID =  1224463164541339165L;    
   //无参构造
   public Stack() { } //将元素存入栈顶 public E push(E item) {
     //Vector中实现,将元素追加到数组末端 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; }    //查找元素0在栈中的位置(栈底下标为0开始) public synchronized int search(Object o) {
     //获取元素索引
int i = lastIndexOf(o); if (i >= 0) { return size() - i; } return -1; } }

猜你喜欢

转载自www.cnblogs.com/despacito/p/10839199.html
今日推荐