ResizingArrayStack

ResizingArrayStack

关于迭代器

Iterable 是JDK源码,可以通过成员内部类,方法内部类,匿名内部类实现Iterator。

public interface Iterable<Item>//对应接口(java.lang.Iterable)
{
	Iterator <Item> iterator();
}

Iterator是一个实现了hasNext()和Next()方法的类的对象,接口定义如下

public interface Iterator<Item>//对应接口(java.util.Iterator)
{
    boolean has next();
    Item next();
    void remove();
}

代码实现

package chapter1.a3;
//下压栈,动态调整数组大小的实现
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;

import java.util.Iterator;
public class ResizingArrayStack<Item> implements Iterable<Item>
{
    private Item[] a = (Item[]) new Object[1];
    private int N = 0;
    public boolean isEmpty(){ return N == 0; }
    public int size(){ return N; }
    private void resize(int max)
    {
        Item[] temp = (Item[])new Object[max];
        for (int i = 0; i < N; i++)
        {
            temp[i] = a[i];
        }
        a = temp;
    }
    public void push(Item item)
    {
        if(N >= a.length)   resize(2 * a.length);
        a[N++] = item;
    }
    public Item pop()
    {
        Item item = a[--N];
        a[N] = null;
        if(N > 0 && N < a.length / 4)   resize(a.length / 2);
        return item;
    }
    public Iterator<Item> iterator()
    {   return new ReverseArrayIterator();    }
    private class ReverseArrayIterator implements Iterator<Item>
    {
        private int i = N;
        public boolean hasNext(){   return i > 0;    }
        public Item next()      {    return a[--N];  }
        public void remove()    {                    }
    }
    public static void main(String[] args)
    {
        FixedCapacityStack<String> s;
        s = new FixedCapacityStack<String>(100);
        while (!StdIn.isEmpty()) {
            String item = StdIn.readString();
            if (!item.equals("-"))
                s.push(item);
            else if (!s.isEmpty()) StdOut.print(s.pop() + " ");
        }
        StdOut.println("(" + s.size() + " left on stack)");
        for (String i: s)
        {
            StdOut.println(i);
        }
    }
}

原文地址:https://www.cnblogs.com/Glov/p/13368752.html