自定义实现Iterator迭代器

2018-09-01  本文已影响9人  lunabird

自己定义一个迭代器,目的是在进行迭代时直接选出一个元素,指针不会自动跳到下一个元素的位置。
贴上代码:

import java.util.Arrays;

/**
 * <pre>
 * 任务:
 * 描述:自定义实现Iterator迭代器
 * 作者:@author huangpeng
 * 时间:@create 2018-08-31 上午9:58
 * 类名: MyIterator
 * </pre>
 **/
public class MyIterator implements HPIterable<String>{
    private Object[] obj = new Object[1];
    private int size;
    private int current=0;

    public static void main(String[] args) {
        MyIterator a = new MyIterator();
        a.add("huang");
        a.add("peng");
        a.add("1");
        a.add("2");
        a.add("3");
        HPIterator iter = a.iterator();
        while(iter.hasNext()){
            System.out.println(iter.pick());
            iter.increment();
        }

        MyIterator b = new MyIterator();
        b.add("66666");
        b.add("77777");
        b.add("88888");
        HPIterator iter1 = b.iterator();
        while(iter1.hasNext()){
            System.out.println(iter1.pick());
            iter1.increment();
        }

        iter.clear();
        while(iter.hasNext()){
            System.out.println(iter.pick());
            iter.increment();
        }
    }
    // 向数组中添加元素
    public void add(String str){
        if(size==obj.length){
            obj = Arrays.copyOf(obj,obj.length<<1);
        }
        obj[size++]=str;
        // 打印数组现在的长度和元素内容       
        System.out.println("length==="+obj.length+","+Arrays.toString(obj));
    }

    // 自定义的迭代器
    @Override
    public HPIterator<String> iterator() {
        class iter implements HPIterator<String>{
            @Override
            public boolean hasNext() {
                if(current<size){
                    return true;
                }
                return false;
            }
            @Override
            public String next() {
                return obj[current++].toString();
            }
            // 选出一个元素,并不向前进一步
            public String pick() {
                return obj[current].toString();
            }
            // 向前进一步
            public void increment(){
                current++;
            }
            // 将迭代的位置移动到头部
            public void clear(){
                current = 0;
            }
        }
        return new iter();
    }
}
// 迭代器接口,做具体的操作
interface HPIterator<E> {
    boolean hasNext();
    E next();
    E pick();
    void increment();
    void clear();
}
// 表示具有迭代功能的接口,只要有了迭代功能,它内部就必须自己去实现一个迭代器
interface HPIterable<T> {
    HPIterator<T> iterator();
}
上一篇下一篇

猜你喜欢

热点阅读