Java基础——Stack源码分析

Stack是什么

  1. Stack是继承于Vector的基础上实现的队列
  2. Stack的特性就是队列的先进后出

Vector有的特性,Stack也有,复习下Vector的特性

  1. Vector是基于可变数组的List接口的同步实现
  2. Vector是有序的
  3. Vector允许null键和null值
  4. Vector已经不建议使用了
public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable{

}
  1. Vector实现了List接口、底层使用数组保存所有元素,其操作基本上是对数组的操作
  2. Vector继承了AbstractList抽象类,它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能
  3. Vector实现了RandmoAccess接口,即提供了随机访问功能,RandmoAccess是java中用来被List实现,为List提供快速访问功能的,我们可以通过元素的序号快速获取元素对象,这就是快速随机访问
  4. Vector实现了Cloneable接口,即覆盖了函数clone(),能被克隆
  5. Vector实现了java.io.Serializable接口,意味着ArrayList支持序列化

Stack的入队

Stack入队就是将对象加入到队列中,而后面的数据将会往后移动

public E push(E item) {
    addElement(item);

    return item;
}

Stack的出队

Stack出队就是将移除最后一个对象,相当于Stack的先进后出特性

public synchronized E pop() {
    E       obj;
    int     len = size();

    obj = peek();
    removeElementAt(len - 1);

    return obj;
}

Stack的栈顶

Stack的peek方法可以查询Stack的栈顶对象

public synchronized E peek() {
    int     len = size();

    if (len == 0)
        throw new EmptyStackException();
    return elementAt(len - 1);
}

Stack的查询

Stack支持数据的查询,调用lastIndexOf方法会从尾部遍历所有元素,找到对应的元素

public synchronized int search(Object o) {
    int i = lastIndexOf(o);

    if (i >= 0) {
        return size() - i;
    }
    return -1;
}

总结

Stack的源码就这么点,只不过是延续了Vector的特性,其最大的区别是Stack拥有栈的概念,即先进后出的特性

猜你喜欢

转载自blog.csdn.net/qq_30379689/article/details/80549036