Java的集合类可以使用for ... each循环

  • List
  • Set
  • Queue
  • Deque

我们以List为例 其实一个java编译器并不知道如何遍历一个List

编译器只是把一个for ... each 通过Iterator改写成普通的for循环

        List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C"); for (String str : list) {
System.out.println(str);
}
        List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C"); for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); ) {
String str = iterator.next();
System.out.println(str);
}

如何让自己编写的集合类使用for..each循环

  • 实现Iterable接口
  • 返回Iterator对象
  • 用Iterator对象迭代

我们自己编写一个集合类ReadOnlyList

public class IteratorTest {

    public static void main(String[] args) {
ReadOnlyList<String> readOnlyList = new ReadOnlyList<>("a","b","c");
for (String str : readOnlyList){
System.out.println(str);
}
}
}
public class ReadOnlyList<E> implements Iterable<E> {

    E[] array;

    @SafeVarargs
public ReadOnlyList(E... array) {
this.array = array; } @Override
public Iterator<E> iterator() {
return new ReadOnlyIterator();
} class ReadOnlyIterator implements Iterator<E> { int index = 0; @Override
public boolean hasNext() {
return index < ReadOnlyList.this.array.length;
} @Override
public E next() {
E e = array[index];
index++;
return e;
}
}
}

运行结果

a
b
c

Java 迭代器的使用 Iterator的更多相关文章

  1. Java 迭代器综述

    一.摘要 迭代器模式是与集合共生共死的.一般来说.我们仅仅要实现一个容器,就须要同一时候提供这个容器的迭代器.使用迭代器的优点是:封装容器的内部实现细节,对于不同的集合,能够提供统一的遍历方式,简化c ...

  2. 设计模式 - 迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释

    迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考迭代器模式(ite ...

  3. Java迭代器Iterator

    之前我们实现了迭代器模式,很多编程语言实际上已经内置了迭代器类,比如Java就为我们实现了迭代器Iterator.我们首先来看Iterator中的源码. 通过JDK源码我们发现Iterator是一个接 ...

  4. Java 迭代器 Iterator

    迭代器模式 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式.这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示. 迭代器模式属于行 ...

  5. [转载]Java迭代器(iterator详解以及和for循环的区别)

    Java迭代器(iterator详解以及和for循环的区别) 觉得有用的话,欢迎一起讨论相互学习~[Follow] 转载自 https://blog.csdn.net/Jae_Wang/article ...

  6. 黑马----JAVA迭代器详解

    JAVA迭代器详解 1.Interable.Iterator和ListIterator 1)迭代器生成接口Interable,用于生成一个具体迭代器 public interface Iterable ...

  7. 深入浅出设计模式——迭代器模式(Iterator Pattern)

    模式动机 一个聚合对象,如一个列表(List)或者一个集合(Set),应该提供一种方法来让别人可以访问它的元素,而又不需要暴露它的内部结构.针对不同的需要,可能还要以不同的方式遍历整个聚合对象,但是我 ...

  8. Java 迭代器理解

    1.Iterator(迭代器) 作为一种设计模式,迭代器可以用于遍历一个对象,对于这个对象的底层结构不必去了解. java中的Iterator一般称为“轻量级”对象,创建它的代价是比较小的.这里笔者不 ...

  9. Java迭代器深入理解及使用

    Iterator(迭代器) 作为一种设计模式,迭代器可以用于遍历一个对象,对于这个对象的底层结构开发人员不必去了解. java中的Iterator一般称为“轻量级”对象,创建它的代价是比较小的.这里笔 ...

随机推荐

  1. css进阶 01-CSS中的非布局样式

    01-CSS中的非布局样式 #前言 CSS中,有很多非布局样式,这些样式(属性)和与布局无关,包括: 字体.字重.颜色.大小.行高 背景.边框 滚动.换行 装饰性属性(粗体.斜体.下划线)等. 这篇文 ...

  2. Nessus<强大的漏扫工具>

    刷漏洞,抓鸡必备,,,,,,, 参考文章: https://blog.csdn.net/wwl012345/article/details/96998187 肝,,,,太全了,,, ps : 我不是脚 ...

  3. Python进阶——什么是描述符?

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 在 Python 开发中,你可能听说过「描述符」这个概念,由于我们很少直接使用它,所以大部分开发人员 ...

  4. 歌曲网站,教你爬取 mp3 和 lyric

    从歌曲网站,获取音频和歌词的流程: 1, 输入歌曲名,查找网站中存在的歌曲 id 2, 拿歌曲 id 下载歌词 lyric 简单的 url 拼接 3, 拿歌曲 id 下载音频 mp3 先用一个 POS ...

  5. Autofac的基本使用---3、泛型类型

    Autofac的基本使用---目录 准备 使用的表是Teacher,创建相关的IDAL.DAL.IBLL.BLL层. 使用EF,创建一个Model层,存放edmx文件. 创建一个Infrastruct ...

  6. Nginx timeout配置

    缘由:客户测试反馈Request failed with status code 504,后续排查应该是nginx未配置超时设置 Step 1.打开nginx.conf查看 缺少keepalive_t ...

  7. 详解Vue中的插槽

    作者: 小土豆 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/2436173500265335 什么是插槽 在日常的项目 ...

  8. 从最长公共子序列问题理解动态规划算法(DP)

    一.动态规划(Dynamic Programming) 动态规划方法通常用于求解最优化问题.我们希望找到一个解使其取得最优值,而不是所有最优解,可能有多个解都达到最优值. 二.什么问题适合DP解法 如 ...

  9. 容器编排系统K8s之访问控制--用户认证

    前文我们聊到了k8s的statefulset控制器相关使用说明,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14201103.html:今天我们来聊一下k8 ...

  10. RabbitMQ不讲武德,发个消息也这么多花招

    前言 本篇博客已被收录GitHub:https://zhouwenxing.github.io/ 文中所涉及的源码也已被收录GitHub:https://github.com/zhouwenxing/ ...