Core Java Tutorial -- Stack

Java Stack 是一个传统的 Collection 类。它扩展 Vector 类但只支持五个操作,以支持 LOFO(后进先出)。自 Java 1.0 以来,它在 Collection API 中可用。

由于 Vector 实现 List,Stack 类也是一个 List 实现类,但是并不支持 Vector 或 List 中的所有操作。由于 Stack 支持 LIFO ,它也被称为 LIFO 列表。

  1. Java Stack
    1. Java Stack
    2. Java Stack Class Diagram
    3. Java Stack Methods
    4. Java Stack Example
    5. How Stack’s push() and pop() operations works Internally?
    6. Java Array to Stack Example
    7. Java List to Stack Example
    8. Java Stack to List Example

Java Stack

在本文中我们将讨论 Java Stack 的以下概念:

  1. Java Stack
  2. Java Stack Class Diagram
  3. Java Stack Methods
  4. Java Stack Example
  5. How Stack’s push() and pop() operations works Internally?
  6. Java Array to Stack Example
  7. Java List to Stack Example
  8. Java Stack to List Example

Java Stack

Java Stack 是 LIFO 类。它扩展 Vetor 类,但是只支持五个操作。Java Stack 类只有一个空的或默认的构造器。所以,当我们创建一个 Stack 时,最初它不包含任何物件,意为着栈为空。

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

Java Stack Class Diagram

Java Stack 直接扩展了 Vector 类并且间接地实现了 RadomAccess、List、Collection 等接口。它是 LIFO 列表。

Core Java Tutorial -- Stack_第1张图片

Java Stack Methods

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

  1. boolean empty():测试这个 Stack 是否为空。
  2. E peek():查看 Stack 顶部的对象,而不将其从 Stack 中移除。
  3. E pop():移除 Stack 顶部的对象,并返回该对象最为此函数的返回值。
  4. E push(E item):将 item 插入到 Stack 顶部。
  5. int search(Object o):Returns the 1-based position where an object is on this stack.

Java Stack Example

是时候来开发基础 Java Stack 栗子来探索它的操作了。

package Stack;

import java.util.Stack;

public class StackBasicExample {
    public static void main(String a[]) {
        Stack 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

How Stack’s push() and pop() operations works Internally?

如我们所知,Stack 的 push() 和 pop() 是最常用的 Stack 操作。push() 操作是将元素插入 Stack 的顶部。pop() 操作被认为用来从 Stack 中移除顶部元素。

Stack 数据结构有一个内部属性:TOP 指向该 Stack 的顶层元素。如果 Stack 为空,则此顶部此顶部指的是第一个元素之前,如下所示:
Core Java Tutorial -- Stack_第2张图片

如下图所示,Stack 的 Push 操作总是在 Stack 顶部插入新元素。

Core Java Tutorial -- Stack_第3张图片

如下图所示,Stack 的 Pop 操作总是在 Stack 顶部移除元素。

Core Java Tutorial -- Stack_第4张图片

当 Stack 没有元素,Stack 的 isEmpty() 操作将返回 false,并且在任何情况下它都返回 true。

Java Array to Stack Example

让我们来探索“如何使用已给的 Int Array 来创建一个 Stack 对象”。

package Stack;

import java.util.Stack;

public class ArrayToStackExample {
    public static void main(String[] args) {
        Integer[] intArr = {1001, 1002, 1003, 1004};
        Stack 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 Example

让我们探讨一下“如何用给定的 List of Integers 创建堆栈对象”。

package Stack;

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

public class ListToStackExample {
    public static void main(String[] args) {
        Stack stack = new Stack<>();
        List 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 addAll Operation : true
Non-Empty stack : [1, 2, 3]

Java Stack to List Example

package Stack;

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

public class StackToListExample {
    public static void main(String[] args) {
        Stack stack = new Stack<>();
        stack.push(1);
        stack.push(2);
        stack.push(3);
        List 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]

你可能感兴趣的:(Java)