package org.loda.structure;import java.util.Iterator;/** * * @ClassName: Stack * @Description: 自定义栈 * @author minjun* @date 2015年5月15日 下午5:22:37 * * @param- */public class Stack
- implements Iterable
- { //数组作为基本存储结构 private Item[] items; //栈大小 private int size; //默认容量 private int capacity=0; public Stack(){ this(10); } @SuppressWarnings("unchecked") public Stack(int capacity){ this.capacity=capacity; items=(Item[]) new Object[capacity]; } //压栈 public void push(Item item){ if(size==items.length) resize(); items[size++]=item; } //出栈 public Item pop(){ if(size==0) throw new RuntimeException("栈容器已经见底了..."); return items[--size]; } //栈大小 public int size(){ return size; } //是否为空栈 public boolean isEmpty(){ return size()==0; } //两倍扩容数组 @SuppressWarnings("unchecked") private void resize() { this.capacity=this.size<<1; Item[] newItems=(Item[]) new Object[capacity]; for(int i=0;i
iterator() { return new StackIterator(); } /** * * @ClassName: StackIterator * @Description: 栈内部迭代器 * @author minjun * @date 2015年5月15日 下午5:23:48 * */ private class StackIterator implements Iterator - { //拷贝一份size变量,用来保证以后size变量依然可以重用 private int innerSize=size; @Override public boolean hasNext() { return innerSize>0; } @Override public Item next() { return items[--innerSize]; } @Override public void remove() { throw new RuntimeException("目前不支持该方法"); } } public static void main(String[] args) { Stack
stack=new Stack (); for(int i=0;i<20;i++){ stack.push((char)(i+65)+"bbbb"); } //下面进行两次迭代测试,目的是确认该stack的迭代器可以复用 for(String s:stack){ System.out.println(s); } System.out.println("-----------------"); for(String s:stack){ System.out.println(s); } }}