本帖最后由 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 + " ");
- }
- }
- }
复制代码
|