从头认识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
原创粉丝点击