博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中迭代器的原理图解和源码浅析
阅读量:7080 次
发布时间:2019-06-28

本文共 1875 字,大约阅读时间需要 6 分钟。

a:迭代器为什么定义了一个接口而不是实现类?

  假如把迭代器定义为一个类,这样我们就可以创建该类的对象,调用该类的方法来实现集合的遍历了。
  但是,java中提供了很多的集合类,而这些集合类的数据结构是不同,所以它们的存储方法也是不同的,
  进而它们的遍历方法也是不一样的,最终就没有把迭代器定义为一个类了。
  (因为定义成一个迭代器类就是一个具体的实现了,既然是具体实现那么它们的遍历方式就是一样的了)
  而无论是那种集合,都应该具备获取元素的功能,并且最好辅助以判断的功能,这样在获取前,先判断,就不容易出错。
  也就是说,判断和获取功能应该是一个集合遍历所具备的,而每种集合的遍历方式又不太一样,
  所以把这两个功能给提取出来,并不提供具体的实现,而这种方式叫做接口。
  那么,真正的具体的实现类在哪里呢?
  在真正的具体的子类中,是以内部类的方式体现的。
  (因为在子类中要包含两个方法)
  如下图所示:

b:迭代器的内部类实现源码浅析

-----------------------------------------------------------------------------public interface Inteator {    public abstract boolean hasNext(); // 注意:默认方法前有public abstract修饰,是接口中方法的默认修饰符    public abstract Object next();     // 注意:默认方法前有public abstract修饰,是接口中方法的默认修饰符}public interface Iterable {    Iterator iterator(); // 没有具体实现,注意:默认方法前有public abstract修饰,是接口中方法的默认修饰符}-----------------------------------------------------------------------------public interface Collection extends Iterable {    Iterator iterator(); // 没有具体实现,注意:默认方法前有public abstract修饰,是接口中方法的默认修饰符}public interface List extends Collection {    Iterator iterator(); // 没有具体实现,注意:默认方法前有public abstract修饰,是接口中方法的默认修饰符}-----------------------------------------------------------------------------public class ArrayList implements List {    public Iterator iterator() { // 具体实现        return new Itr();    }        private class Itr implements Iterator { // Itr是Iterator接口的实现类        public boolean hasNext() {}        public Object next(){}     }}-----------------------------------------------------------------------------Collection c = new ArrayList();c.add("hello");c.add("world");c.add("java");Iterator it = c.iterator();     // new Itr();while(it.hasNext()) {    String s = (String)it.next();    System.out.println(s);}-----------------------------------------------------------------------------

 

我的GitHub地址:
我的博客园地址:
我的蚂蚁笔记博客地址:
Copyright ©2018 黑泽明军
【转载文章务必保留出处和署名,谢谢!】
你可能感兴趣的文章
在kubernetes集群中部署open-falcon
查看>>
手把手教你实现高性能Android树形控件 TreeView
查看>>
vue swiper轮播图不显示 swiper-pagination 小圆点
查看>>
HTML逆向解析生成Markdown
查看>>
架构师都知道的分布式对象存储解决方案
查看>>
[译] 提高编程能力的秘诀
查看>>
Java&Spring系列笔记
查看>>
一次全栈实践心得
查看>>
如今,收入最高编程语言资料汇总!看到就是赚到哦!
查看>>
参数使用小技巧
查看>>
2019年成为优秀的Java开发人员的10个技巧
查看>>
MWeb集成七牛云图床服务、上传图片
查看>>
创业新机:朋友圈广告位大改,“解刨”小程序的真正价值
查看>>
小猿圈web前端之JavaScript放大镜效果
查看>>
奇点大学人工智能专家:人造智能大脑已接近现实
查看>>
Python学习笔记 - 环境搭建
查看>>
大数据算法:kNN算法
查看>>
静态路由实验题
查看>>
简单理解Ajax原理
查看>>
Delphi XE2 之 FireMonkey 入门(18) - TLang(多语言切换的实现)
查看>>