Java编程思想里的泛型实现一个堆栈类

觉得作者写得太好了,不得不收藏一下。

对这个例子的理解:

//类型参数不能用基本类型,T和U其实是同一类型。

//每次放新数据都成为新的top,把原来的top往下压一级,通过指针建立链接。

//末端哨兵既是默认构造器创建出的符合end()返回true的节点。

//: generics/LinkedStack.java

// A stack implemented with an internal linked structure.

package generics;



public class LinkedStack<T> {

  private static class Node<U> {

    U item;

    Node<U> next;

    Node() { item = null; next = null; }

    Node(U item, Node<U> next) {

      this.item = item;

      this.next = next;

    }

    boolean end() { return item == null && next == null; }

  }

  private Node<T> top = new Node<T>(); // End sentinel

  public void push(T item) {

    top = new Node<T>(item, top);

  }    

  public T pop() {

    T result = top.item;

    if(!top.end())

      top = top.next;

    return result;

  }

  public static void main(String[] args) {

    LinkedStack<String> lss = new LinkedStack<String>();

    for(String s : "Phasers on stun!".split(" "))

      lss.push(s);

    String ss;

    while((ss = lss.pop()) != null)

      System.out.println(ss);

      //----- if put integer into the LinkedList

      LinkedStack<Integer> lii = new LinkedStack<Integer>();

      for(Integer i = 0; i < 10; i++){

          lii.push(i);

      }

      Integer end;

      while((end = lii.pop()) != null)

          System.out.println(end);

      //----- integer test end!

  }

  

  

} /* Output:

stun!

on

Phasers

*///:~

 

你可能感兴趣的:(java编程思想)