Java後臺開發面試
阿新 • • 發佈:2019-01-09
面試題: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語句。