美文网首页
自定义实现Iterator迭代器

自定义实现Iterator迭代器

作者: lunabird | 来源:发表于2018-09-01 13:17 被阅读9次

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

    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();
    }
    

    相关文章

      网友评论

          本文标题:自定义实现Iterator迭代器

          本文链接:https://www.haomeiwen.com/subject/ygaewftx.html