Java方法总结8 —— Stack

这篇博客详细介绍了Java中的Stack类,包括构造方法、push、pop、peek、empty和search等操作。每个方法从详细信息、数据库实现角度以及时间复杂度和空间复杂度进行了分析,展示了Stack作为后进先出数据结构的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

综述

1.构造方法

(1)方法详细信息

(2)数据库角度实现

(3)时间复杂度和空间复杂度

2.push

(1)方法详细信息

(2)数据库角度实现

(3)时间复杂度和空间复杂度

3.pop

(1)方法详细信息

(2)数据库角度实现

(3)时间复杂度和空间复杂度

4.peek

(1)方法详细信息

(2)数据库角度实现

(3)时间复杂度和空间复杂度

5.empty

(1)方法详细信息

(2)数据库角度实现

(3)时间复杂度和空间复杂度

6.search

(1)方法详细信息

(2)数据库角度实现

(3)时间复杂度和空间复杂度


综述

public class Stack<E>extends Vector<E>

  Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。

        首次创建堆栈时,它不包含项。

  Deque 接口及其实现提供了 LIFO 堆栈操作的更完整和更一致的 set,应该优先使用此 set,而非此类。例如:

   Deque<Integer> stack = new ArrayDeque<Integer>();

1.构造方法

(1)方法详细信息

        创建一个空堆栈。

(2)数据库角度实现

public Stack() {
    }

(3)时间复杂度和空间复杂度

        时间复杂度:O(1)

        空间复杂度:O(1)

2.push

(1)方法详细信息

        把项压入堆栈顶部。

(2)数据库角度实现

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

        return item;
    }

public synchronized void addElement(E obj) {
        modCount++;
        ensureCapacityHelper(elementCount + 1);
        elementData[elementCount++] = obj;
    }

(3)时间复杂度和空间复杂度

        时间复杂度:O(1)

        空间复杂度:O(1)

3.pop

(1)方法详细信息

        移除堆栈顶部的对象,并作为此函数的值返回该对象。

(2)数据库角度实现

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

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

        return obj;
    }

public synchronized void removeElementAt(int index) {
        modCount++;
        if (index >= elementCount) {
            throw new ArrayIndexOutOfBoundsException(index + " >= " +
                                                     elementCount);
        }
        else if (index < 0) {
            throw new ArrayIndexOutOfBoundsException(index);
        }
        int j = elementCount - index - 1;
        if (j > 0) {
            System.arraycopy(elementData, index + 1, elementData, index, j);
        }
        elementCount--;
        elementData[elementCount] = null; /* to let gc do its work */
    }

(3)时间复杂度和空间复杂度

        时间复杂度:O(1)

        空间复杂度:O(1)

4.peek

(1)方法详细信息

        查看堆栈顶部的对象,但不从堆栈中移除它。

(2)数据库角度实现

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

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

public synchronized E elementAt(int index) {
        if (index >= elementCount) {
            throw new ArrayIndexOutOfBoundsException(index + " >= " + elementCount);
        }

        return elementData(index);
    }

E elementData(int index) {
        return (E) elementData[index];
    }

(3)时间复杂度和空间复杂度

        时间复杂度:O(1)

        空间复杂度:O(1)

5.empty

(1)方法详细信息

        测试堆栈是否为空。

(2)数据库角度实现

public boolean empty() {
        return size() == 0;
    }

(3)时间复杂度和空间复杂度

        时间复杂度:O(1)

        空间复杂度:O(1)

6.search

(1)方法详细信息

        返回对象在堆栈中的位置,以 1 为基数。如果对象 o 是堆栈中的一个项,此方法返回距堆栈顶部最近的出现位置到堆栈顶部的距离;堆栈中最顶部项的距离为 1。使用 equals 方法比较 o 与堆栈中的项。

(2)数据库角度实现

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

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

public synchronized int lastIndexOf(Object o) {
        return lastIndexOf(o, elementCount-1);
    }

(3)时间复杂度和空间复杂度

        时间复杂度:O(n)

        空间复杂度:O(1)

总结

        stack 的相关函数并不复杂,使用栈是为了完成先进后出的任务,stack 是借用 vector 中的方法,来实现操作目的。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值