Java堆栈

时间:2020-02-23 14:36:52  来源:igfitidea点击:

Java Stack是旧的Collection类。
它通过五种操作扩展了Vector类,以支持LIFO(后进先出)。
从Java 1.0开始,它在Collection API中可用。

当Vector实现List时,Stack类也是List实现类,但不支持Vector或者List的所有操作。
由于Stack支持LIFO,因此也称为LIFO列表。

Java堆栈

Java Stack是LIFO对象。
它扩展了Vector类,但仅支持五个操作。
Java Stack类只有一个为空的构造函数或者默认构造函数。
因此,当我们创建堆栈时,最初它不包含任何表示堆栈为空的项目。

堆栈内部有一个指针:TOP,它指向堆栈元素的顶部。
如果Stack为空,则TOP引用第一个元素之前的位置。
如果Stack不为空,则TOP引用顶部元素。

Java堆栈类图

Java Stack直接扩展Vector类,并间接实现RandomAccess,List,Collection等接口。
这是一个后进先出列表。

Java Stack方法

Java Stack仅通过以下五个操作扩展Vector类。

  • boolean empty():测试此堆栈是否为空。

  • E peek():在不将其从堆栈中移除的情况下,查看该堆栈顶部的对象。

  • E pop():删除此堆栈顶部的对象,并将该对象作为此函数的值返回。

  • E push(E item):将一个项目推到此堆栈的顶部。

  • int search(Object o):返回对象在此堆栈上的从1开始的位置。

在接下来的部分中,我们将通过一些有用的示例来深入讨论这些操作。

Java堆栈示例

现在是时候开发基本的Java Stack示例来探索其操作了。

import java.util.Stack;

public class StackBasicExample {
  public static void main(String a[]){
      Stack<Integer> stack = new Stack<>();
      System.out.println("Empty stack : "  + stack);
      System.out.println("Empty stack : "  + stack.isEmpty());
      //Exception in thread "main" java.util.EmptyStackException
      //System.out.println("Empty stack : Pop Operation : "  + stack.pop());
      stack.push(1001);
      stack.push(1002);
      stack.push(1003);
      stack.push(1004);
      System.out.println("Non-Empty stack : "  + stack);
      System.out.println("Non-Empty stack: Pop Operation : "  + stack.pop());
      System.out.println("Non-Empty stack : After Pop Operation : "  + stack);
      System.out.println("Non-Empty stack : search() Operation : "  + stack.search(1002));
      System.out.println("Non-Empty stack : "  + stack.isEmpty());
  }
}

输出:

Empty stack : []
Empty stack : true
Non-Empty stack : [1001, 1002, 1003, 1004]
Non-Empty stack: Pop Operation : 1004
Non-Empty stack : After Pop Operation : [1001, 1002, 1003]
Non-Empty stack : search() Operation : 2
Non-Empty stack : false

Stack的push()和pop()操作在内部如何工作?

我们知道Stack的push()和pop()是最常用的Stack操作。
push()操作用于将元素插入顶部的Stack中。
pop()操作用于从堆栈中删除顶部元素。

堆栈数据结构具有一个内部属性:top引用该堆栈的top元素。
如果Stack为空,则此顶部指的是第一个元素之前的元素,如下所示:

如下图所示,堆栈的推入操作始终在堆栈顶部插入新元素。

如下图所示,堆栈的弹出操作始终从堆栈顶部删除元素。

如果没有元素,Stack的isEmpty()操作将返回True,否则返回False。

Java数组堆叠示例

让我们在这里探讨"如何使用给定的Int数组创建Stack对象"。

import java.util.Stack;

public class ArrayToStackExample {
  public static void main(String a[]){
      Integer[] intArr = { 1001,1002,1003,1004};
      Stack<Integer> stack = new Stack<>();
      for(Integer i : intArr){
          stack.push(i);
      }
      System.out.println("Non-Empty stack : "  + stack);
  }
}

输出:

Non-Empty stack : [1001, 1002, 1003, 1004]

Java List to Stack示例

让我们在这里探讨"如何使用给定的整数列表创建Stack对象"。

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class ListToStackExample {
  public static void main(String a[]){
      Stack<Integer> stack = new Stack<>();
      List<Integer> list = new ArrayList<>();
      list.add(1);
      list.add(2);
      list.add(3);
      System.out.println("Non-Empty stack addAll Operation : "  + stack.addAll(list));
      System.out.println("Non-Empty stack : "  + stack);
  }
}

输出:

Non-Empty stack : true
Non-Empty stack : [1, 2, 3]

Java堆栈列出示例

让我们在这里探讨"如何使用整数堆栈创建List对象"。

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class StackBasicExample {
  public static void main(String a[]){
      Stack<Integer> stack = new Stack<>();
      stack.push(1);
      stack.push(2);
      stack.push(3);
      List<Integer> list = new ArrayList<>();
      list.addAll(stack);
      System.out.println("Non-Empty stack : "  + stack);
      System.out.println("Non-Empty List : "  + list);
  }
}

输出:

Non-Empty stack : [1, 2, 3]
Non-Empty List : [1, 2, 3]