千家信息网

如何实现java中的迭代器功能

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇"如何实现java中的迭代器功能"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"如
千家信息网最后更新 2026年11月03日如何实现java中的迭代器功能

这篇"如何实现java中的迭代器功能"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"如何实现java中的迭代器功能"文章吧。

两行代码

 List list=new ArrayList<>(2);        list.add("java");        list.add("C#");        Iterator iterator=list.iterator();        while (iterator.hasNext()){            System.out.println(iterator.next());        }

上面的代码是java中很常见的一个迭代的功能。
于是自己也想要写一个泛型类,然后支持这种迭代的功能。
于是乎写了一个类似ArrayList的动态数组功能。

package a;import javax.swing.text.html.HTMLDocument;import java.util.ArrayList;import java.util.Arrays;import java.util.Iterator;public class Gys{    private final  static int default_capacity =10;    private int endIndex =0;    private Object[] elemts;    public Gys() {        this.elemts = new Object[default_capacity];    }    public T[] add(T t){        if(elemts.length-1< endIndex){            int newCapcti= default_capacity *2;            elemts= Arrays.copyOf(elemts,newCapcti);        }        elemts[endIndex++]=t;        return (T[])elemts;    }    public int size(){        return endIndex;    }    public T get(int i){        if(i< endIndex){            return (T) elemts[i];        }        throw new RuntimeException("索引超出界限");    }    public static void main(String[] args) {        Gys gys=new Gys<>();        gys.add(5);        gys.add(45);        System.out.println(gys.get(0));        System.out.println(gys.get(1));            }}

上面的代码怎么都没办法实现Iterator的功能,在idea下怎么都点不出来Iterator的提示;
于是只能去翻阅jdk原码。在ArrayList中看到如下的代码。

在ArrayList中申明一个内部类Itr,并且继承Iterator这个接口,然后实现hasNext()和next()方法。
在定义一个方法专门获取迭代器实例。
public Iterator iterator() { return new Itr(); }
这才明白如何实现迭代器功能。

所以对上面的泛型代码进行改造。

package a;import java.util.Arrays;import java.util.Iterator;public class Gys{    private final  static int default_capacity =10;    private int endIndex =0;    private Object[] elemts;    public Gys() {        this.elemts = new Object[default_capacity];    }    public T[] add(T t){        if(elemts.length-1< endIndex){            int newCapcti= default_capacity *2;            elemts= Arrays.copyOf(elemts,newCapcti);        }        elemts[endIndex++]=t;        return (T[])elemts;    }    public int size(){        return endIndex;    }    class Itr implements Iterator{        private int point;        private int len;        public Itr() {            this.point=0;            this.len=endIndex;        }        @Override        public boolean hasNext() {            return point iterator(){        return new Itr();    }    public T get(int i){        if(i< endIndex){            return (T) elemts[i];        }        throw new RuntimeException("索引超出界限");    }    public static void main(String[] args) {        Gys gys=new Gys<>();        gys.add(5);        gys.add(45);        /*System.out.println(gys.get(0));        System.out.println(gys.get(1));*/        Iterator iterator= gys.iterator();        while (iterator.hasNext()){            System.out.println(iterator.next());        }    }}

怎么样、这个时候就可以对自己的泛型类Gys实现迭代器的功能了。
同时另一个疑问也来了,和Iterator长得异常相似的接口Iterable是干什么的?他和Iterator又是什么关系?
翻开源码看看。

源码中可以看出Iterable接口提供了一个获取迭代器的接口方法。那么又有哪些类实现了接口呢?
使用idea的ctrl+h快捷键调出查看类的全部继承关系。

我们看到熟悉的Collection接口。

看到Colllection接口中并没有实现这个接口,依然是一个接口方法。继续向下追踪

看到我们熟悉的ArrayList这个类型实现了iterator方法。
从这个角度来看ArrayList中的iterator()方法不是空穴来风的,他是通过继承collection和Iterable这些接口而来的。
虽然我们上面的泛型类实现了迭代的功能,但是学习了新知识后总要练练手,于是这个时候画蛇添足的对上面的代码继续改造。

package a;import java.util.Arrays;import java.util.Iterator;public class Gys implements Iterable{    private final  static int default_capacity =10;    private int endIndex =0;    private Object[] elemts;    public Gys() {        this.elemts = new Object[default_capacity];    }    public T[] add(T t){        if(elemts.length-1< endIndex){            int newCapcti= default_capacity *2;            elemts= Arrays.copyOf(elemts,newCapcti);        }        elemts[endIndex++]=t;        return (T[])elemts;    }    public int size(){        return endIndex;    }    class Itr implements Iterator{        private int point;        private int len;        public Itr() {            this.point=0;            this.len=endIndex;        }        @Override        public boolean hasNext() {            return point iterator(){        return new Itr();    }    public T get(int i){        if(i< endIndex){            return (T) elemts[i];        }        throw new RuntimeException("索引超出界限");    }    public static void main(String[] args) {        Gys gys=new Gys<>();        gys.add(5);        gys.add(45);        /*System.out.println(gys.get(0));        System.out.println(gys.get(1));*/        Iterator iterator= gys.iterator();        while (iterator.hasNext()){            System.out.println(iterator.next());        }    }}

以上就是关于"如何实现java中的迭代器功能"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

功能 迭代 接口 代码 方法 内容 面的 界限 索引 文章 时候 源码 知识 篇文章 改造 相似 画蛇添足 空穴来风 价值 办法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技企业 互联网巨头反垄断金融科技 互联网科技英文 长亮科技 互联网金融 成都仁贤领冠互联网科技有限公司 青海省互联网新科技 互联网和高科技公司 玖二柒互联网科技公司待遇 互联网经济与金融科技 互联网还是高科技吗 互联网5g黑科技有哪些 燊美集互联网科技有限公司 四川慕妮娅互联网科技有限公司 山东子淼互联网科技有限公司 互联网金融科技元年 科技互联网行业投资研究 银川新华互联网科技学校原画 瑞安市蟠桃会互联网科技有限公司 互联网科技创业有什么好项目 小牛互联网科技有限公司地址 亿人帮互联网科技有限公司 重生之互联网科技帝国 互联网的科技创新 有马互联网科技 嘟嘟瓜互联网科技 紫鲸互联网科技 江苏南京365互联网科技 注册互联网科技公司经营范围大全 江苏互联网科技小贷 容联科技互联网电商
0