从头认识java-9.13 foreach与迭代器
来源:互联网 发布:江西国科军工集团 知乎 编辑:程序博客网 时间:2024/06/02 03:15
这一章节我们来说一下foreach与Iterator。
1.例子:
package com.ray.ch09;import java.util.ArrayList;public class Test {public static void showItems(Iterable<Integer> iterator) {for (Integer item : iterator) {System.out.println(item);}}public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<Integer>();for (int i = 0; i < 10; i++) {list.add(i);}showItems(list);}}
上面的例子是不是很熟悉,但是也不尽相同?
因为上面我们只是沿用了foreach,但是增加了Iterable接口这个东西。
在foreach的实现里面,只要实现了Iterable接口的容器,都可以使用foreach,因此, 尽管foreach一般使用在数组里面,但是在大部分容器里面也是可以使用的。
我们将上一章节的代码修改一下,形成新的代码:
package com.ray.ch09;import java.util.Iterator;public class Test {public static void showItems(Iterator<Person> iterator) {while (iterator.hasNext()) {Person person = iterator.next();System.out.print(person.getId() + " ");}}public static void showItems(Iterable<Person> iterator) {for (Person person : iterator) {System.out.println(person.getId());}}public static void main(String[] args) {PersonList personList = new PersonList();showItems(personList.iterator());showItems(personList);}}class Person {private int id = 0;public int getId() {return id;}public void setId(int id) {this.id = id;}}class PersonList implements Iterable<Person> {private Person[] persons = new Person[10];public PersonList() {for (int i = 0; i < persons.length; i++) {Person person = new Person();person.setId(i);persons[i] = person;}}public Iterator<Person> iterator() {return new Iterator<Person>() {private int index = 0;@Overridepublic boolean hasNext() {return index < persons.length;}@Overridepublic Person next() {return persons[index++];}@Overridepublic void remove() {// 以后会展开实现}};}}
代码基本差不多,只不过在遍历到时候不再是使用Iterable,而是只能使用foreach。
注意:上面把数组和实现Iterable接口的类放在一起说,但是如果你当数组实现了Iterable接口,那就有问题了,看下面的代码。
package com.ray.ch09;import java.util.Arrays;public class Test {public static void showItems(Iterable<Integer> iterator) {for (Integer item : iterator) {System.out.println(item);}}public static void main(String[] args) {Integer[] array = new Integer[10];for (int i = 0; i < 10; i++) {array[i] = i;}// showItems(array);//errorshowItems(Arrays.asList(array));}}
如果把数字当成参数传过去,抛异常,只有在数组转成list后,才能使用。
当然, 如果我们接受的参数直接就是数组,那么,又会不一样。
package com.ray.ch09;public class Test {public static void showItems(Integer[] items) {for (Integer item : items) {System.out.println(item);}}public static void main(String[] args) {Integer[] array = new Integer[10];for (int i = 0; i < 10; i++) {array[i] = i;}showItems(array);}}
总结:这一章节主要讲述了foreach与Iterable之间的关系。
这一章节就到这里,谢谢。
-----------------------------------
目录
0 0
- 从头认识java-9.13 foreach与迭代器
- 从头认识java-11.2 "+"与StringBuilder
- 从头认识java-特辑-foreach在java里面两种实现原理总结
- 从头认识java-9.5 迭代器Iterator
- 从头认识java-目录
- 从头认识java-1.7 单根继承与集合
- 从头认识java-4.1 创建与初始化对象
- 从头认识java-6.6 final(4)-类与忠告
- 从头认识java-6.7 初始化与类的加载
- 从头认识java-7.1 抽象类与抽象方法
- 从头认识java-7.8 接口与工厂模式
- 从头认识java-8.4 内部类与向上转型
- 从头认识java-9.4 List的简介与性能
- 从头认识java-9.12 接口Collection与Iterator
- 从头认识java-13.8 类型擦除的问题与解决
- 从头认识java-14.1 再次对比数组与容器
- 从头认识java-15.7 Map(7)-TreeMap与LinkedHashMap
- 从头认识java-1.6 多态
- hdoj sequence1 5567 (简单暴力)
- python getA()
- [Python] 用Flask引入CSS无法正常显示
- HDU 2098 分拆素数和
- python pip install pil
- 从头认识java-9.13 foreach与迭代器
- 【小细节】Integer缓存机制(包装类型的缓存机制)
- 杭电2058 The sum problem
- 模拟delegate内部实现
- 《算法竞赛入门经典2ndEdition 》例题3-2 WERTYU(WERTYU, Uva10082)
- Android Resource Types之Color State List 简介
- SQLi-Labs Lesson 1-8 notes
- iOS App提交指南-协议、税务和银行业务
- Java抽象类和接口