首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

List 專有取元方式:索引遍歷 vs 迭代器的效能與適用場景對比

     編輯:Java 綜合教學

List 專有取元方式:索引遍歷 vs 迭代器的效能與適用場景對比

兩種遍歷寫法


// 1. 索引遍歷(List 專有)
for (int i = 0; i < list.size(); i++) {
    System.out.println("get: " + list.get(i));
}

// 2. 迭代器遍歷(Collection 通用)
Iterator it = list.iterator();
while (it.hasNext()) {
    System.out.println("next: " + it.next());
}

效能差異分析

實現類get(index)iterator.next()推薦方式
ArrayListO(1) 陣列直接定址O(1) 遊標移動兩者皆可,索引略快
LinkedListO(n) 需從頭/尾遍歷O(1) 節點指針移動強制使用迭代器

原理說明

  • ArrayList.get(i):elementData[i] 直接記憶體定址
  • LinkedList.get(i):node(i) 從離 i 最近端點開始遍歷
  • Iterator 內部維護 next 指針,next() 僅移動指針

最佳實踐

  1. 優先使用增強 for 循環 for (E e : list),編譯器自動轉為迭代器
  2. 需索引時(如刪除、替換),ArrayList 用索引,LinkedList 用 ListIterator
  3. 併發環境下迭代器會快速失效,需加鎖或用 CopyOnWriteArrayList

擴展:ListIterator 雙向遊標


ListIterator lit = list.listIterator();
while (lit.hasNext()) { lit.next(); }
while (lit.hasPrevious()) { lit.previous(); } // 逆向遍歷
lit.add("new"); // 插入
lit.set("modified"); // 替換

理解底層資料結構特性,選擇正確遍歷方式,是效能優化的基礎細節。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved