增强for循环-foreach
增强for循环(从Java5开始):可以迭代数组和集合,取出其中的元素.
语法:
for(元素类型 变量 : 数组/Iterable对象){
//TODO
}
使用for-each的底层是怎么回事?
- 对于数组来说:底层依然使用的for循环迭代数组,使用数组的索引来获取每一个元素.
- 对于Iterable对象来说:底层依然使用迭代器(Iterator).
for-each其实是java5提供的语法糖.
switch语句
switch语句将从与选择项相匹配的case标签处开始执行,直到遇到break语句,或者执行到switch语句的结束处.如果没有相匹配的case语句,而有default语句,就会执行这个语句
注意:case分支语句的末尾没有break语句,就会接着执行下一个case分支语句.
case标签可以是:
1.char,byte,short,int(或其包装类)的常量表达式,因为byte,short,char在做运算的时候,自动提升为int类型,可以简单认为switch就只支持int类型.
2.枚举类型
3.从Java7开始,也可以是字符串字面量
嵌套For循环性能优化案例
案例描述:请对以下的代码进行优化
for (int i = 0; i < 1000; i++) {
for (int j = 0; j < 100; j++){
for (int k = 0; k < 10; k++){
//doWork();
}
}
}
从给出的代码可知,不论如何优化,循环体代码执行的次数都是相同的,该部分不存在优化的可能。那么,代码的优化只能从循环变量i、j、k的实例化、初始化、比较、自增次数等方面的耗时上进行分析。
详细的优化思路可以参考文章:http://cgs1999.iteye.com/blog/1596671
控制循环结构语句
- break:终止循环
- continue:表示跳过continue当前这一次循环体,开始下一次循环
- return语句:结束方法,如果在循环中使用return,就会结束该循环所在的方法,方法都结束了,循环也终止了.
控制外层循环
方法1,使用标签。标签就是给某个循环起的别名,不过该别名得满足标识符的规范。
若要控制外层循环,就在break或continue后面跟上循环的别名就可以了
事实上,可以将标签引用到任何的语句中,甚至可以引用到if语句或者语句块中,
//推出外层循环例子
public class ExitOutCycleDemo {
public static void main(String[] args) {
//要在二维数组中查找到6这个数字--使用标签的方法
int arr[][] = { { 1, 2, 3 }, { 4, 5, 6, 7 }, { 9 } };
ok: for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j] == 6) {
System.out.println("6所在的位置是:" + "a" + "[" + i + "]" + "["
+ j + "]");//6所在的位置是:a[1][2]
break ok;
}
}
}
}
}
方法2,除了使用标签的方法之外,也可以通过让外层的循环条件表达式的结果可以受到里层循环体代码控制的方法,例如:
private static void test2() {
//要在二维数组中查找到6这个数字--使用内循环控制外循环的方法
int arr[][] = { { 1, 2, 3 }, { 4, 5, 6, 7 }, { 9 } };
boolean Found = false;
for (int i = 0; i < arr.length && !Found; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j] == 6) {
System.out.println("6所在的位置是:" + "a" + "[" + i + "]" + "["
+ j + "]");//6所在的位置是:a[1][2]
Found = true;
}
}
}
}