黑马程序员技术交流社区
标题:
foreach与迭代器
[打印本页]
作者:
yaodd321
时间:
2014-11-3 23:12
标题:
foreach与迭代器
本帖最后由 yaodd321 于 2014-11-4 10:26 编辑
foreach是for语句的特殊简化版本,在遍历数组、集合方面,为开发人员提供很大的遍历。
foreach的语句格式:
for(元素类型t 元素变量x:遍历对象){
引用了x的java语句;
}
下面是例子
用于数组;
package cn.itcat.damo1;
/*
* foreach语句用于数组
*/
import java.util.Random;
public class foreach {
public static void main(String[] args) {
int arr[] = new int[10];
// 创建Random对象
Random rand = new Random();
for (int i = 0; i < 10; i++) {
// 生成100以内的随机数
arr = rand.nextInt(100);
}
// 遍历数组
for (int x : arr) {
System.out.print(x + " ");
}
}
}
用于集合:
package cn.itcat.damo1;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
public class foreachDemo {
public static void main(String[] args) {
//创建集合
Collection<String> cs = new LinkedList<String>();
//将String[]中的元素添加到cs集合中
Collections.addAll(cs, "Take the long way home".split(" "));
//遍历集合
for(String s:cs){
System.out.print(s+" ");
}
}
}
复制代码
而我们要探究为什么foreach可以有这种功能。在java SE5中,引入了一个新的Iterable接口,改接口包含一个能够产生Iterator的iterator()方法,并且Iterable接口被foreach用来在序列中移动。所以,只要你创建的类实现了Iterable接口,就可以将它用于foreach语句
package cn.itcat.damo1;
import java.util.Iterator;
public class IterableClass implements Iterable<String> {
protected String[] words = ("I will override the method of iterator from the class of Iterable"
.split(" "));
// 覆写iterator方法
@Override
public Iterator<String> iterator() {
// 匿名内部类
return new Iterator<String>() {
private int idex = 0;
@Override
// 序列移动的条件
public boolean hasNext() {
return idex < words.length;
}
@Override
// 返回遍历到的对象
public String next() {
return words[idex++];
}
};
}
public static void main(String[] args) {
for (String s : new IterableClass()) {
System.out.print(s + " ");
}
}
}
复制代码
作者:
lighter
时间:
2014-11-4 00:30
不错,看下并复习下
作者:
zxbzxb333
时间:
2014-11-4 01:12
nice学习了
作者:
韶山
时间:
2014-11-4 02:15
看了一下,学习了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2