三種遍歷順序的區別和性能

1、Iterator接口

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

提供的三種方法:

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

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

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

簡單實例:

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循環

簡單實例:

public class test1 {
public static void main(String[] args) {
// 創建List並添加元素
List list = new ArrayList();
list.add("1");
list.add("3");
list.add("4");
// 利用foreach語句輸出集合元素
for (String x : list) {
System.out.println("foreach:"+x);
}
}
}

優缺點分析:

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

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

 3、原始for循環遍歷

簡單實例:

int size=;list.size();
for(int i=0;i<size;i++){                     
    tmp=list.get(i);
}


優缺點分析:

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

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

各種遍歷方式適用場合:

1、傳統的for循環遍歷,基於計數器的:

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

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

2、迭代器遍歷,Iterator:

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

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

3、foreach循環遍歷:

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





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章