java Stack(栈)

Posted 飞龙dragon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java Stack(栈)相关的知识,希望对你有一定的参考价值。

"Stack" 通常时指"后进后出"(LIFO)的容器,有时栈也被称为叠加栈,因为最后"压入"栈的元素,第一个"弹出"栈,经常用来类比栈的事物时装有弹簧的储存器中的自助托盘,最后装入托盘的总是最先拿出.

LinkedList具有能够直接实现栈的所有功能的方法,因此可以直接将LinkedList当栈使用,不过,有时一个正真的"Stack"更能把事情讲清楚

下面时java编程思想的栈,T是泛型,类名之后加<T>告诉编译器这将是一个参数化类型而其中的类细参数,即在类被使用时将被实际类类型替换的参数,"我么在定义一个可以持有T类型对象的Stack." Stack是用LinkedList实现的,而LinkedList也被告知它将持有T类型对象.注意push接受的是T类型的对象,而peek()和pop返回T类型的对象,

//: net/mindview/util/Stack.java
// Making a stack from a LinkedList.
package object;
import java.util.LinkedList;

public class Stack<T> {//T是泛型,类名之后加<T>告诉编译器这将是一个参数化类型
                       //而其中的类细参数,即在类被使用时将被实际类类型替换的参数
  private LinkedList<T> storage = new LinkedList<T>();
  public void push(T v) { storage.addFirst(v); }  //入栈
  public T peek() { return storage.getFirst(); }  //取栈顶值
  public T pop() { return storage.removeFirst(); } //出栈
  public boolean empty() { return storage.isEmpty(); } //判空
  public String toString() { return storage.toString(); }
} ///:~

使用实例

//: holding/StackTest.java
package object;
//import net.mindview.util.*;
public class StackTest {
  public static void main(String[] args) {
    Stack<String> stack = new Stack<String>();
    for(String s : "My dog has fleas".split(" "))/split分隔字符串返回数组
      stack.push(s);
    while(!stack.empty())
      System.out.print(stack.pop() + " ");
  }
} /* Output:
fleas has dog My
*///:~

编程思想的Stack和java的Stack使用实例

//: holding/StackCollision.java
package object;
import net.mindview.util.*;

public class StackCollision {
  public static void main(String[] args) {
   Stack<String> stack =
      new Stack<String>();
    for(String s : "My dog has fleas".split(" "))
      stack.push(s);
    while(!stack.empty())
      System.out.print(stack.pop() + " ");
    System.out.println();
    java.util.Stack<String> stack2 =
      new java.util.Stack<String>();
    for(String s : "My dog has fleas".split(" "))
      stack2.push(s);
    while(!stack2.empty())
      System.out.print(stack2.pop() + " ");
  }
} /* Output:
fleas has dog My
fleas has dog My
*///:~

 

以上是关于java Stack(栈)的主要内容,如果未能解决你的问题,请参考以下文章

java刷题--剑指offer09 用两个栈实现队列

从Java底层分析Stack(栈)的用法——源码分析系列

java Stack(栈)

java数据结构与算法之使用两个栈实现队列

Java 栈 如何实现括号匹配

Java数据结构—栈