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

Java 進階教程:List 介面核心概念與四大實現類全景解析

     編輯:Java 相關知識

List 介面核心定位

  • 繼承 Collection,表示有序、可重複、可為 null的元素序列
  • 核心特性:精確位置控制(索引訪問)、允許重複元素、允許多個 null
  • 提供位置相關操作:get(index)、add(index, e)、remove(index)、set(index, e)、indexOf/lastIndexOf
  • 專用迭代器:ListIterator(雙向遍歷、可修改、可獲取索引)

四大主流實現類對比

實現類底層結構線程安全核心優勢核心劣勢適用場景
ArrayList動態陣列否隨機訪問 O(1)、記憶體緊湊、遍歷極快頭部/中間增刪 O(n)默認首選 (90%+ 場景)
LinkedList雙向鏈表否首尾增刪 O(1)、實現 Deque/Queue/Stack隨機訪問 O(n)、記憶體開銷大高頻頭尾操作、棧/隊列/雙端隊列
Vector動態陣列是 (方法級同步)舊代碼兼容、可配置擴容增量同步開銷大、API 陳舊極舊版本維護,新代碼禁用
Stack繼承 Vector是LIFO 棧語義 API繼承 Vector 包袱、功能單一教學/舊代碼,新代碼用 ArrayDeque

List 核心 API 全景速查

分類關鍵方法說明
位置操作get(int index)返回指定位置元素
set(int index, E element)替換指定位置元素
add(int index, E element)插入元素,後續右移
remove(int index)移除並返回指定位置元素
addAll(int index, Collection<? extends E> c)批量插入集合
查找indexOf(Object o)首次出現索引,無則 -1
lastIndexOf(Object o)末次出現索引
contains(Object o)是否包含元素
containsAll(Collection<?> c)是否包含所有元素
批量修改removeAll(Collection<?> c)移除所有包含在 c 中的元素
retainAll(Collection<?> c)僅保留包含在 c 中的元素 (交集)
clear()清空列表
subList(int from, int to)返回視圖 [from, to),修改影響原列表
迭代器iterator()單向 Iterator
listIterator()雙向 ListIterator (可獲取索引、add/set/remove)
listIterator(int index)從指定索引開始的 ListIterator
轉換toArray()返回 Object[]
toArray(T[] a)返回類型安全數組 (推薦 new Type[0])

ListIterator 進階用法


List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
ListIterator<String> it = list.listIterator();

// 正向遍歷
while (it.hasNext()) {
    int idx = it.nextIndex();
    String val = it.next();
    if ("b".equals(val)) it.set("B"); // 修改
}

// 逆向遍歷
while (it.hasPrevious()) {
    int idx = it.previousIndex();
    String val = it.previous();
    if ("a".equals(val)) it.add("new"); // 在前插入
}

現代替代方案:多執行緒場景選型

場景推薦方案特性
讀多寫少、需快照隔離CopyOnWriteArrayList寫入複製數組、讀無鎖、迭代器不拋 CME
高並發讀寫、需複合操作原子Collections.synchronizedList + 手動鎖粗粒度鎖、複合操作需 synchronized(list)
棧/隊列/雙端隊列語義ArrayDeque / ConcurrentLinkedDeque高效雙端操作、非同步/並發版
單執行緒、高效能ArrayList / LinkedList無同步開銷、按訪問模式選擇

避坑指南精華版

  1. ✅ 默認 new ArrayList<>(預估大小),減少擴容。
  2. ✅ 需首尾高頻操作用 LinkedList,或直接用 ArrayDeque。
  3. ❌ 不要在 for-each/Iterator 中直接 list.remove(),用 Iterator.remove() 或 removeIf()。
  4. ❌ 循環添加對象必須每次 new,否則全是同一引用。
  5. ❌ 多執行緒勿直接用 ArrayList/LinkedList/Vector,選並發集合。
  6. ✅ toArray 必須傳類型陣列:list.toArray(new String[0])。
  7. ✅ 善用 subList 視圖處理區間,但注意結構修改會失效。

總結

List 是 Java 處理有序集合的核心抽象。ArrayList 是默認王者,LinkedList 專治首尾操作,Vector/Stack 是歷史包袱。掌握位置操作、雙向迭代器、實現類效能特性、多執行緒替代方案、經典陷阱,是 Java 開發者從入門到精通的必經之路。選對工具,事半功倍。

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