实现简单的泛型栈

栈里需要放不同的数据类型,所以需要实现泛型。

Stack 类支持迭代器,需要实现两个接口。

  • Stack 整个类作为 Iterable 接口的实现
  • Stack 类的 iterator() 方法返回一个迭代器,这个迭代器作为 Iterator 接口的实现。
import java.util.Iterator;

public class Stack<Item> implements Iterable<Item>
{
    public Iterator<Item> iterator() 
    {
        return new ListIterator();    
    }

    private class ListIterator implements Iterator<Item>
    {
        private Node current = first;

        public boolean hasNext() { return current != null; }
        public Item next()
        {
            Item item = current.item;
            current = current.next;
            return item;
        }
    }

    private class Node
    {
        Item item;
        Node next;
    }

    private Node first = null;

    public boolean isEmpty()
    { return first == null; }

    public void push(Item item)
    {
        Node oldfirst = first;
        first = new Node();
        first.item = item;
        first.next = oldfirst;
    }

    public Item pop()
    {
        Item item = first.item;
        first = first.next;
        return item;
    }

    public static void main(String[] argv)
    {
        Stack<String> stringStack = new Stack<String>();
        stringStack.push("huangyi");
        stringStack.push("jiahai");
        System.out.println(stringStack.pop());

        Stack<Integer> intStack = new Stack<Integer>();
        intStack.push(22);
        intStack.push(33);
        intStack.push(44);
        intStack.push(55);

        Iterator<Integer> iter = intStack.iterator();
        while (iter.hasNext())
        {
            Integer num = iter.next();
            System.out.println(num);
        }
    }
}

其中的迭代器遍历可以替换为这种简单的语法

for(Integer i: intStack)
    System.out.println(i);

另外,C++11 也兹此这种写法,参见 c++11-ranged-for-loop, C++ 也是如此优雅。

参考

https://class.coursera.org/algs4partI-010/lecture/21

http://www.cprogramming.com/c++11/c++11-ranged-for-loop.html

转载于:https://my.oschina.net/lvyi/blog/653727

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值