1. 程式人生 > >Java後臺開發面試

Java後臺開發面試

面試題: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語句。