这是一个栈的简单实现,同时也实现了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 + " >"));
}
}