从头认识java-9.13 foreach与迭代器

页面导航:首页 > 软件编程 > Java编程 > 从头认识java-9.13 foreach与迭代器

从头认识java-9.13 foreach与迭代器

来源: 作者: 时间:2016-01-21 09:39 【

这一章节我们来说一下foreach与Iterator。1 例子:package com ray ch09;import java util ArrayList;public class Test {public static void showItems(Iterable iterator) {for (Integer

这一章节我们来说一下foreach与Iterator。

1.例子:

package com.ray.ch09;

import java.util.ArrayList;

public class Test {

	public static void showItems(Iterable iterator) {
		for (Integer item : iterator) {
			System.out.println(item);
		}
	}

	public static void main(String[] args) {
		ArrayList list = new ArrayList();
		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 iterator) {
		while (iterator.hasNext()) {
			Person person = iterator.next();
			System.out.print(person.getId() +  );
		}
	}

	public static void showItems(Iterable 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 {
	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 iterator() {
		return new Iterator() {
			private int index = 0;

			@Override
			public boolean hasNext() {
				return index < persons.length;
			}

			@Override
			public Person next() {
				return persons[index++];
			}

			@Override
			public void remove() {// 以后会展开实现
			}
		};
	}
}

代码基本差不多,只不过在遍历到时候不再是使用Iterable,而是只能使用foreach。

 

注意:上面把数组和实现Iterable接口的类放在一起说,但是如果你当数组实现了Iterable接口,那就有问题了,看下面的代码。

package com.ray.ch09;

import java.util.Arrays;

public class Test {

	public static void showItems(Iterable 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);//error
		showItems(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之间的关系。

 

 


Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<