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慢一點,但是還好,時間複雜度都是一樣的。所以怎麼選擇,參考上面兩種方式,做一個折中的選擇。




發佈了4 篇原創文章 · 獲贊 17 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章