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

最新文章

  1. 在 Visual Studio 等编辑器/IDE中自动切换输入法,不需要手动的有没有?
  2. JavaScript中const、var和let区别浅析
  3. Codeforces Round #244 (Div. 2) A. Police Recruits
  4. task判断任务是否存在
  5. hdu 2594-Simpsons’ Hidden Talents(KMP)
  6. html5 做游戏 Quintus Sublime Text牛逼的神器
  7. WebUploader——一个页面多个实例上传图片
  8. 201521123048 《Java程序设计》第8周学习总结
  9. Bootstrap3 栅格系统-Less mixin 和变量
  10. php如何解决中文乱码问题?
  11. 《Swell数学》用户故事
  12. MySQL数据查询
  13. 外边距塌陷 margin collapsing
  14. Android--------内存泄露工具LeakCanary
  15. c++ 查找容器中不满足条件的元素,返回iterator(find_if_not)
  16. cocos2dx 在windows下开启console
  17. [LeetCode系列] 变序词查找问题(Anagrams)
  18. 好记性不如烂笔头-linux学习笔记5mysql主从复制
  19. Java Socket TCP编程
  20. 【Lucene】Apache Lucene全文检索引擎架构之中文分词和高亮显示4

热门文章

  1. 一段小代码秒懂C++右值引用和RVO(返回值优化)的误区
  2. 想用selenium ,先了解html 基础知识(5)
  3. vue第四单元(初识vue-在页面中直接引入vue框架-学习使用vue语法-vue的指令-介绍data用法-methods用法)
  4. NET 5 收发邮件之 MailKit
  5. webform中ajax.ajaxMethod使用方法
  6. (一)NumPy基础:数组和矢量计算
  7. 前置机器学习(五):30分钟掌握常用Matplitlib用法
  8. java.io.IOException: Target host must not be null, or set in parameters. scheme=null, host=null, path=/
  9. mysql数据库连接java
  10. Kafka 消费组消费者分配策略