面试题:Java中for和foreach区别在哪里?什么时候用for?什么时候用foreach?
从Java 5 之后,Java提供另一种更简单的循环:foreach循环,这种循环遍历数组和集合更加简洁。使用foreach循环遍历数组和集合元组时,无须获得数组和集合的长度,无须根据索引来访问数组元素和集合元素,foreach循环会自动遍历数组和集合的每个元素。
一、常见使用方式
1. foreach遍历数组
public class ForeachTest{
public static void main(String[] args){
String[] books = {"Java","C++","C"};
for(String book:books){
System.out.println(book);
}
}
}
2. foreach遍历List
public class ForeachTest{
public static void main(String[] args){
List<String> list = new ArrayList<String>();
list.add("Java");
list.add("C++");
list.add("C");
for(String str : list){
System.out.println(str);
}
}
}
从上面程序可以看出,使用foreach循环遍历数组元素(或集合元素)时无须获得数组长度,也无须根据索引来访问数组元素(或集合元素)。
foreach循环和普通循环不同的是,它无须循环条件,无须循环迭代语句,这些部分都由系统来完成,foreach循环自动迭代数组(或集合)的每个元素,当每个元组都被迭代一次时,foreach循环自动结束。
二、局限性
foreach虽然能遍历数组或者集合,但是只能用来遍历,无法在遍历的过程中对数组或者集合进行修改,而for循环可以在遍历的过程中对数组或者集合进行修改。
1. 数组
public class ForeachTest{
public static void main(String[] args){
String[] books = {"Java"、"C++"、"C"};
//foreach
for(String book:books){
book = "Python";
}
System.out.println("foreach:" + Arrays.toString(books));
//for
for(int i = 0; i < books.length ; i++){
books[i] = "Python";
}
System.out.println("for:" + Arrays.toString(books));
}
}
输出
foreach:[Java, C++, C]
for:[Python, Python, Python]
2. 集合
public class ForeachTest{
public static void main(String[] args){
List<String> list = new ArrayList<String>();
list.add("Java");
list.add("C++");
list.add("C");
//foreach
for(String str : list){
str = "Python";
}
System.out.println("foreach:" + Arrays.toString(list.toArray()));
//for
for(int i = 0; i < list.size(); i++){
list.set(i,"Python");
}
System.out.println("for:" + Arrays.toString(list.toArray()));
}
}
输出
foreach:[Java, C++, C]
for:[Python, Python, Python]
总结如下:
1、如果只是遍历数组或者集合中的元素,用foreach循环;
2、如果要修改数组或者集合中的元素,就要用for循环。
3、foreach不能使用下标来访问每个元素,因此不能用于增加、删除等复杂操作。
4、foreach语句是for语句的特殊版本,但是foreach语句并不能完全取代for语句。