这是一个栈的简单实现,同时也实现了Iterable接口。代码较简单,比起JDK自带的Stack类,简直弱爆了。但本人主要是为了复习而已,个人觉得还是有一定参考价值的,有兴趣的看一看吧。
具体实现代码如下:
import java.util.Iterator; import java.util.NoSuchElementException; public class Stack<T> implements Iterable<T> { private Node<T> first; private int size; public Stack() { this.first = null; this.size = 0; } /** * 定义一个静态类,表示节点 */ private static class Node<T> { private T item; private Node<T> next; } public void push(T item) { Node<T> oldFirst = first; first = new Node<T>(); first.item = item; first.next = oldFirst; size++; } public T pop() { if (isEmpty()) throw new NoSuchElementException("栈为空,不能继续调用此方法"); T t = first.item; first = first.next; size--; return t; } public int size() { return size; } public boolean isEmpty() { return first == null; } public T peek() { if(isEmpty()) throw new NoSuchElementException("栈为空"); return first.item; } @Override public Iterator<T> iterator() { return new StackIterator<T>(first); } /** * 栈的迭代器的具体实现 * @author lhever * @param <T> */ private class StackIterator<T> implements Iterator<T> { private Node<T> current; public StackIterator(Node<T> node) { current = node; } public boolean hasNext() { return current != null; } public void remove() { throw new UnsupportedOperationException(); } public T next() { if (!hasNext()) throw new NoSuchElementException(); T item = current.item; current = current.next; return item; } } public String toString() { StringBuilder s = new StringBuilder(); for (T item : this) s.append(item + " -> "); return s.toString() + "null"; } public static void main(String... args) { Stack<Integer> stack = new Stack<Integer>(); stack.push(1); stack.push(2); stack.push(3); stack.push(4); System.out.println(stack); System.out.println("栈的大小是: " + stack.size()); stack.peek(); System.out.println(stack); System.out.println("栈的大小是: " + stack.size()); stack.pop(); System.out.println(stack); System.out.println("栈的大小是: " + stack.size()); Iterator<Integer> iterator = stack.iterator(); iterator.forEachRemaining(t -> System.out.println("< " + t + " >")); } }