Day12-39.Foreach syntax
来源:互联网 发布:淘宝绽放茉莉恶心 编辑:程序博客网 时间:2024/06/13 23:31
foreach 语法
Java SE5引入了一种新的更加简洁的for语法用于数组和容器(在第16章与第17章中将更多的讨论这种语法),即foreach语法,表示不必创建int变量去对由访问项构成的序列进行计数,foreach将自动产生每一项。
例如,假设有一个float数组,我们要选取该数组中的每一个元素:
//: control/ForEachFloat.javaimport java.util.*;public class ForEachFloat { public static void main(String[] args) { Random rand = new Random(47); float f[] = new float[10]; for(int i = 0; i < 10; i++) f[i] = rand.nextFloat(); for(float x : f) System.out.println(x); }} /* Output:0.727115750.399826350.53094540.05341220.160206560.577997570.188478650.41701370.516602040.73734957*///:~这个数组是用旧式的for循环组装的,因为在组装时必须按索引访问它。在下面这行中可以看到foreach语法:for(float x: f){这条语句定义了一个float类型的变量x,继而将每一个f的元素赋值给x。任何返回一个数组的方法都可以使用foreach。例如,String类有一个方法toCharArray(),它返回一个char数组,因此可以很容易地像下面这样迭代在字符串里面的所有字符://: control/ForEachString.javapublic class ForEachString { public static void main(String[] args) { for(char c : "An African Swallow".toCharArray() ) System.out.print(c + " "); }} /* Output:A n A f r i c a n S w a l l o w*///:~
就像在第11章中所看到的,foreach还可以用于任何Iterable对象。
许多for语句都会在一个整型值序列中步进,就像下面这样:
for(int i=0 ;i<100; i++)
对于这些语句,foreach语法将不起作用,除非先创建一个int数组。
为了简化这些任务,我在net.mindview.util.Range包中创建了一个名为range()的方法,它可以自动地生成恰当的数组。
我的目的是将range()用做static导入:
//: control/ForEachInt.javaimport static net.mindview.util.Range.*;import static net.mindview.util.Print.*;public class ForEachInt { public static void main(String[] args) { for(int i : range(10)) // 0..9 printnb(i + " "); print(); for(int i : range(5, 10)) // 5..9 printnb(i + " "); print(); for(int i : range(5, 20, 3)) // 5..20 step 3 printnb(i + " "); print(); }} /* Output:0 1 2 3 4 5 6 7 8 95 6 7 8 95 8 11 14 17*///:~
range()方法已经被重载,重载表示相同的方法名可以具有不同的参数列表。
range()的第一种重载形式是从0开始产生值,直至范围的上限,但不包括该上限。
第二种形式从第一个值开始产生值,直至比第二个值小1的值为止。
第三种形式有一个步进值,因此它每次的增量为该值。
range()是所谓生成器的一个非常简单的版本,有关生成器的内容将在本书稍后进行介绍。
请注意,尽管range()使得foreach语法可以适用于更多的场合,并且这样做似乎可以增加可读性,但是它的效率会稍许降低,
因此如果您在做性能调优,也许应该使用仿真器来做评价。
你会注意到,除了print()之外,我们还使用了printnb().
printnb()方法不会换行,因此可以使用它将一行拆分成多个片段输出。
foreach语法不仅在录入代码时可以节省时间,更重要的是,它阅读起来也要容易得多,
它说明您正在努力做什么(例如获取数组中的每一个元素),而不是给出你正在如何做的细节
(例如正在创建索引,因此可以使用它来选取数组中的每一个元素)。
在本书中,我们只要有可能就会使用foreach语法。
- Day12-39.Foreach syntax
- day12
- day12
- day12
- day12
- day12
- day12
- day12
- Day12
- day12
- Day12
- day12
- day12
- day12
- day12
- Day12
- unexpected T_ENDFOREACH PHP FOREACH循环 syntax error, unexpected T_ENDFOREACH错误
- Android学习总结六:ArrayList动态数组、Foreach syntax
- R 文本挖掘 Part2--几个聚类分类算法以及应用
- B: 字符串的展开
- Joint Cascade Face Detection and Alignment流程
- Android 轮番图
- VS2013之c++调用Lua5.3.x方法
- Day12-39.Foreach syntax
- MailBee.NET Objects退回邮件教程(二):POP3部分
- 三种常见的部署Kubernetes的方式
- #笔记 简单使用flex与sticky footer方式解决底部固定在底栏的问题
- 高级NFC
- Android Retrofit请求服务器返回字符串(非JSON)
- ZOJ2975 伪数组压缩+组合数
- 大数据常见错误解决方案(转载)
- 冒泡排序