博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java foreach 源码_java Foreach与迭代器(示例代码)
阅读量:6692 次
发布时间:2019-06-25

本文共 2410 字,大约阅读时间需要 8 分钟。

foreach语法主要用于数组,但是它也可以用于Collection对象,下面是一个示例

packageobject;//: holding/ForEachCollections.java//All collections work with foreach.

import java.util.*;public classForEachCollections {public static voidmain(String[] args) {

Collection cs = new LinkedList();

Collections.addAll(cs,"Take the long way home".split(" "));for(String s : cs)

System.out.print("‘" + s + "‘ ");

}

}/*Output:

‘Take‘ ‘the‘ ‘long‘ ‘way‘ ‘home‘*///:~

cs是一个Colllection,所以这段代码展示了能够与foreach一起工作是所有Collection对象的特性

之所以能够工作,是因为Iterable接口,该接口包含了一个能够产生Iterator的iterator()方法,并且Iterator接口被foreach用来在序列中移动,因此如果你创建了任何实现了Iterable的类,都可以用于foreach语句中:

packageobject;//: holding/IterableClass.java//Anything Iterable works with foreach.

import java.util.*;public class IterableClass implements Iterable{protected String[] words = ("And that is how " +

"we know the Earth to be banana-shaped.").split(" ");public Iteratoriterator() {//返回匿名内部类Iterator的实例,该匿名内部类可以遍历数组中的所以单词return new Iterator() {private int index = 0;public booleanhasNext() {return index

}public String next() { return words[index++]; }public void remove() { //Not implemented

throw newUnsupportedOperationException();

}

};

}public static voidmain(String[] args) {for(String s : newIterableClass())(foreach语句调用了Iterator的方法

System.out.print(s+ " ");

}

}/*Output:

And that is how we know the Earth to be banana-shaped.*///:~

在java中,大量的类都是Iterable类型,主要包括Collection类(但不包括各种Map),例如下面的代码可以显示所有的操作系统的环境变量:

packageobject;//: holding/EnvironmentVariables.java

import java.util.*;public classEnvironmentVariables {public static voidmain(String[] args) {for(Map.Entry entry: System.getenv().entrySet()) {//System.getenv()返回一个Map,entrySet()产生一个

//Map.Entry的元素构成的Set,并且这个Set是一个Iterable,因此它可以用于foreach循环

System.out.println(entry.getKey()+ ": " +entry.getValue());

}

}

}/*(Execute to see output)*///:~

foreach可以用于数组和其他任何Iterable,但这不意味着数组肯定也是Iterable,而任何自动包装也不会自动发生,下面示例展示了当尝试将数组当作Iterable参数传递时会导致失败,这说明不存在任何从数组到Iterable的自动转化,必须手工执行这种转换

packageobject;//: holding/ArrayIsNotIterable.java

import java.util.*;public classArrayIsNotIterable {static void test(Iterableib) {for(T t : ib)

System.out.print(t+ " ");

}public static voidmain(String[] args) {

test(Arrays.asList(1, 2, 3));

String[] strings= { "A", "B", "C"};//An array works in foreach, but it‘s not Iterable://! test(strings);//You must explicitly convert it to an Iterable:

test(Arrays.asList(strings));//test(strings);

}

}/*Output:

1 2 3 A B C*///:~

转载地址:http://hvdoo.baihongyu.com/

你可能感兴趣的文章
hive 动态分区太多问题
查看>>
Windows Server 2008 RemoteApp(二)---部署激活远程桌面授权服务器
查看>>
读取日志文件开发总结
查看>>
IOS --React Native
查看>>
Linux CPU
查看>>
Linux/Centos ntp时间同步,联网情况和无网情况配置
查看>>
初级网络运维工程师比赛题目
查看>>
跨交换机实现vlan实验报告
查看>>
jquery easyui滚动条部分设置介绍
查看>>
cannot find -lxxx问题
查看>>
预防云端开源项目打包 Redis Labs再更改模块
查看>>
超惊人!去年发生的身分外泄安全事件是2017的4倍
查看>>
oracle sqlplus免安装的配置instantclient-basiclite
查看>>
Java开发GUI之选择列表
查看>>
一、分布式商城架构逻辑图
查看>>
机器人是如何完成避障的?机器人避障解决方案解读
查看>>
通过错误堆栈信息和源码分析错误来源
查看>>
C和C++ 读写文件速度问题
查看>>
layer.mobile 弹出框插件(2.0版)
查看>>
C#基础 条件语句、选择语句和循环语句
查看>>