自定义实现Iterator迭代器

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

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();
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,491评论 25 709
  • 1 场景问题# 1.1 工资表数据的整合## 考虑这样一个实际应用:整合工资表数据。 这个项目的背景是这样的,项目...
    七寸知架构阅读 7,340评论 0 53
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,146评论 1 51
  • 近日往返奔波,俗务缠身,实在没写出完整的东西来,只好收集一些小纠结、小感悟来凑一期作业,在高速服务区临时停一下车把...
    老李飞刀阅读 2,812评论 4 3
  • 第二章 十年之后,冯小雅,马尔泰·紫依,汪玉流……安排到辛者库去了,王小凤安排到皇后身边当掌事宫女,凌七巧,邵春华...
    霍教主阅读 1,885评论 0 0