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

Java List 接口全解析:有序集合的位置操作、迭代器與並發修改陷阱

     編輯:Java 綜合教學

List 接口核心特徵

  • 繼承 Collection,元素有序、可重複、允許 null。
  • 核心增強:面向索引的操作(指定位置增刪改查)+ 雙向遍歷器 ListIterator。

五大核心操作類別

1. 添加操作

void add(int index, E element)           // 指定位置插入
boolean addAll(int index, Collection c) // 批量插入

越界拋 IndexOutOfBoundsException。示例輸出:

[紅樓夢, 平凡的世界, 三國演義, 三國演義, null]
[紅樓夢, [西游記, 水浒傳], 平凡的世界, 三國演義, 三國演義, null]

2. 獲取與查找

E get(int index)
int indexOf(Object o)       // 首次出現索引
int lastIndexOf(Object o)   // 最後出現索引
List subList(int from, int to) // 子列表視圖 [from, to)

3. 刪除操作

E remove(int index) // 移除並返回該元素,後續元素左移

4. 替換操作

E set(int index, E element) // 替換並返回舊值

5. 遍歷方式對比

方式代碼片段特點
ListIterator 正向/逆向it.hasNext()/it.next() / it.hasPrevious()/it.previous()支持雙向、可增刪改;逆向需先正向遍歷至末尾
Iteratorfor (Iterator it = list.iterator(); it.hasNext(); )單向只讀,結束後變量釋放較快
for 索引循環for (int i=0; i隨機訪問快(ArrayList),順序訪問慢(LinkedList)

ListIterator 進階操作

void add(E e)        // 當前位置插入
void remove()        // 移除上次 next/previous 返回的元素
void set(E e)        // 替換上次訪問的元素

關鍵規則:調用 remove/set 前必須先調用 next/previous,否則拋 IllegalStateException。

並發修改異常與解決方案

問題:使用 Iterator 遍歷時直接操作集合(如 list.add())拋 ConcurrentModificationException。

兩種解決路徑:

  1. 迭代器操作迭代器:用 ListIterator.add/remove/set 替代集合方法。
  2. 集合操作集合:用普通 for (int i=0; i 索引循環,直接調用 list.add/remove(新元素追加至末尾)。
// 方案1:ListIterator 安全添加
ListIterator it = list.listIterator();
while (it.hasNext()) {
    if ("三國演義".equals(it.next())) it.add("西游記");
}

// 方案2:索引循環安全添加
for (int i = 0; i < list.size(); i++) {
    if ("水浒傳".equals(list.get(i))) list.add("西游記");
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved