1. 程式人生 > >java集合的三種遍歷方式以及各自優缺點分析

java集合的三種遍歷方式以及各自優缺點分析

1、Iterator介面 Iterator是Java集合框架的成員,主要用於遍歷(即迭代訪問)Collection集合中的元素,也稱為迭代器。

提供的三種方法:

boolean hasNext():返回集合裡的下一個元素。

Object next():返回集合裡下一個元素。

void remove();刪除集合裡上一次next方法返回的元素。

簡單例項:

[java] view plain copy public class test1 { public static void main(String[] args) {

Collection books = new HashSet();   

books.add("book1");   
books.add("book2");   
books.add("book3");   

//獲取books集合對應的迭代器   
Iterator it = books.iterator();   

while(it.hasNext())   
{   

    String book = (String)it.next();   

    System.out.println("bookName:"+book); //遍歷輸出book1 book2 book3  

    if (book.equals("book1"))   
    {   
        it.remove();  

//使用Iterator迭代過程中,不可直接操作/修改集合元素,只能使用迭代器操作元素 下面程式碼引發異常  
//books.remove(book);   

    }   

    //對book變數賦值,不會改變集合元素本身   
     book = "測試";   

}   
System.out.println(books); //輸出[book2,book3] 因為book1被刪除  

}

} 優缺點分析: 優點:迭代器提供了操作元素的方法 可以在遍歷中相應地操作元素 缺點:運行復雜,效能稍差,效率相對其他兩種遍歷方式較低

2、使用foreach迴圈(加強for迴圈)

簡單例項:

[java] view plain copy public class test1 { public static void main(String[] args) {

    // 建立List並新增元素  
    List<string> list = new ArrayList<string>();  
    list.add("1");  
    list.add("3");  
    list.add("4");  

    // 利用foreach語句輸出集合元素  

    for (String x : list) {  
        System.out.println("foreach:"+x);  
     }  
    }  
}

優缺點分析:

優點:程式碼簡潔,不易出錯。

缺點:只能做簡單的遍歷,不能在遍歷過程中操作(刪除、替換)資料集合。

3、原始for迴圈遍歷

簡單例項:

[java] view plain copy public class test1 { public static void main(String[] args) {

    // 建立List並新增元素  
    List<string> list = new ArrayList<string>();  
    list.add("1");  
    list.add("3");  
    list.add("4");  

    // 利用for迴圈語句輸出集合元素  

    for (int i=0;i<list.size();i++) {="" system.out.println("for:"+list.get(i));="" }="" }<="" pre=""></list.size();i++)></string></string>  

優缺點分析:

優點:效率最高,遍歷快,可以根據自定計數器操作元素

缺點:不適用所有集合,適用範圍小

各種遍歷方式適用場合:

1、傳統的for迴圈遍歷,基於計數器的:

順序儲存:讀取效能比較高。適用於遍歷順序儲存集合。

鏈式儲存:時間複雜度太大,不適用於遍歷鏈式儲存的集合。

2、迭代器遍歷,Iterator:

順序儲存:如果不是太在意時間,推薦選擇此方式,畢竟程式碼更加簡潔,也防止了Off-By-One的問題。

鏈式儲存:意義就重大了,平均時間複雜度降為O(n),還是挺誘人的,所以推薦此種遍歷方式。

3、foreach迴圈遍歷:

foreach只是讓程式碼更加簡潔了,但是他有一些缺點,就是遍歷過程中不能操作資料集合(刪除等),所以有些場合不使用。而且它本身就是基於Iterator實現的,但是由於型別轉換的問題,所以會比直接使用Iterator慢一點,但是還好,時間複雜度都是一樣的。所以怎麼選擇,參考上面兩種方式,做一個折中的選擇。