我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

两行代码

 List<String> list=new ArrayList<>(2);
        list.add("java");
        list.add("C#");
        Iterator<String> 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<T>{
    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<Integer> 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中看到如下的代码。

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

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

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

package a;

import java.util.Arrays;
import java.util.Iterator;

public class Gys<T>{
    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<T>{

        private int point;
        private int len;

        public Itr() {
            this.point=0;
            this.len=endIndex;
        }

        @Override
        public boolean hasNext() {
            return point<endIndex?true:false;
        }

        @Override
        public T next() {
            return (T) elemts[point++];
        }
    }

    public Iterator<T> 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<Integer> gys=new Gys<>();
        gys.add(5);
        gys.add(45);
        
        Iterator iterator= gys.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

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

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

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

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

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

  我们看到熟悉的Collection接口。

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

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

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

package a;

import java.util.Arrays;
import java.util.Iterator;

public class Gys<T> implements Iterable<T>{
    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<T>{

        private int point;
        private int len;

        public Itr() {
            this.point=0;
            this.len=endIndex;
        }

        @Override
        public boolean hasNext() {
            return point<endIndex?true:false;
        }

        @Override
        public T next() {
            return (T) elemts[point++];
        }
    }    
   @Override
    public Iterator<T> 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<Integer> gys=new Gys<>();
        gys.add(5);
        gys.add(45);
        
        Iterator iterator= gys.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java如何实现迭代器模式

这篇文章主要介绍java如何实现迭代器模式,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。类型:行为类模式类图:如果要问java中使用最多的一种
2023-05-30

Python中的迭代器是如何实现的?

Python中的迭代器是如何实现的?迭代器是Python中非常重要的一个概念,它可以让我们方便地对集合中的元素进行遍历和访问。在Python中,几乎所有可迭代的对象,比如列表、元组、字典和集合等,都可以通过迭代器来进行遍历。那么迭代器是如何
2023-10-25

迭代器模式如何在java项目中实现

迭代器模式如何在java项目中实现 ?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。java 迭代器模式实例详解首先,为什么使用迭代器模式,目的就是通过一个通用的迭代方法,隐
2023-05-31

C#如何实现迭代器方法

这篇文章主要介绍C#如何实现迭代器方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.迭代器方法可以使用foreach循环语句进行的迭代的方法,称为可迭代方法,或者迭代器方法。迭代器用法法介绍。  迭代器用于依次返
2023-06-29

java 中ArrayList迭代的两种实现方法

java 中ArrayList迭代的两种实现方法Iterator与for语句的结合来实现,代码很简单,大家参考下。实现代码:package cn.us; import java.util.ArrayList; import java.uti
2023-05-31

STL组件之迭代器如何实现

小编给大家分享一下STL组件之迭代器如何实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种
2023-06-17

如何在java项目中使用迭代器

如何在java项目中使用迭代器?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 迭代器模式将一个集合给封装起来,主要是为用户提供了一种遍历其内部元素的方式。迭代器模式有两个优点:
2023-05-31

java迭代器实现的原理是什么

Java迭代器的实现原理是基于设计模式中的迭代器模式。迭代器模式是一种行为型模式,它提供了一种方法来顺序访问一个聚合对象中的元素,而不需要暴露该对象的内部表示。在Java中,迭代器通过实现Iterator接口来实现。Iterator接口包含
2023-10-10

pandas.DataFrame的for循环迭代如何实现

本篇内容主要讲解“pandas.DataFrame的for循环迭代如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“pandas.DataFrame的for循环迭代如何实现”吧!当使用for
2023-07-05

Iterator迭代器如何在Java项目中使用

Iterator迭代器如何在Java项目中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是迭代器  在Java中,有很多的数据容器,对于这些的操作有很多的共性。Java
2023-05-31

java如何实现抽奖功能

本篇内容主要讲解“java如何实现抽奖功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java如何实现抽奖功能”吧!Java可以用来干什么Java主要应用于:1. web开发;2. Andro
2023-06-14

java如何实现分页功能

在Java中实现分页功能,可以使用数据库的查询语句和Java代码来实现。以下是一种常见的实现方式:1. 首先,在数据库中使用查询语句获取总记录条数。例如,对于MySQL数据库,可以使用以下语句:```SELECT COUNT(*) FROM
2023-08-19

java如何实现打印功能

在Java中,可以使用System.out.println()方法实现打印功能。这个方法可以打印出指定的字符串或变量的值。下面是几个示例:1. 打印字符串:```javaString message = "Hello, World!";Sy
2023-08-24

java如何实现定位功能

Java可以通过使用GPS或Wi-Fi来实现定位功能。以下是几种实现定位功能的方法:1. 使用GPS:Java可以通过调用系统的GPS定位服务来获取设备的精确位置信息。可以使用Android的LocationManager类来实现GPS定位
2023-09-21

编程热搜

目录