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

Java List 集合常用操作全攻略:增刪改查、截取、轉換與最佳實踐

     編輯:Java 程式設計入門

核心 API 速查表

操作類別方法說明
增add(E e)尾部添加
add(int index, E e)指定位置插入,後續元素右移
addAll(Collection)批量追加
addAll(int index, Collection)批量插入
刪remove(int index)按索引刪除,返回被刪元素
remove(Object o)按對象刪除首個匹配,返回 boolean
clear()清空列表
改set(int index, E e)替換指定位置元素,返回舊值
replaceAll(UnaryOperator)Java 8+ 函數式批量替換
查get(int index)按索引獲取
indexOf(Object o)首次出現索引,無則 -1
lastIndexOf(Object o)最後出現索引
contains(Object o)是否包含 (equals 比較)
子列表subList(from, to)左閉右開視圖,底層共享數據,結構修改會拋異常
判空/大小isEmpty(), size()
遍歷iterator(), forEach, for-each優先 for-each / forEach,需刪除用 Iterator
轉換toArray(), toArray(T[])轉數組,建議傳入 new T[0] 或 new T[size]
流式處理stream(), parallelStream()Java 8+ 函數式操作

實戰代碼範例

List fruits = new ArrayList<>(List.of("蘋果", "香蕉", "橙子"));

// 1. 增刪改查
fruits.add("葡萄");                    // ["蘋果","香蕉","橙子","葡萄"]
fruits.add(1, "芒果");                 // ["蘋果","芒果","香蕉","橙子","葡萄"]
String first = fruits.get(0);          // "蘋果"
fruits.set(0, "西瓜");                 // ["西瓜","芒果","香蕉","橙子","葡萄"]
boolean hasBanana = fruits.contains("香蕉"); // true
int idx = fruits.indexOf("橙子");       // 3
fruits.remove("葡萄");                 // 刪除對象
fruits.remove(0);                      // 刪除索引 0

// 2. 截取子列表 (視圖)
List sub = fruits.subList(1, 3); // [芒果, 香蕉]
// sub.add("新"); // 會導致 ConcurrentModificationException (結構修改)

// 3. 安全轉換為獨立列表
List copy = new ArrayList<>(sub); // 斷開關聯

// 4. 兩列表比較
List a = List.of("A", "B");
List b = List.of("A", "B");
a.equals(b); // true (元素順序相同)
a.hashCode() == b.hashCode(); // true (List hashCode 算法統一)

// 5. 轉數組 (推薦寫法)
String[] arr = fruits.toArray(new String[0]); // JDK 11+ 自動推導大小

// 6. 類型轉換 (流式)
List buffers = fruits.stream()
    .map(StringBuffer::new)
    .collect(Collectors.toList());

ArrayList vs LinkedList 選型指南

場景推薦原因
頻繁隨機訪問、尾部增刪、遍歷ArrayList底層數組,緩存友好,get/set O(1)
頻繁頭部/中間增刪、佇列場景LinkedList雙向鏈表,增刪 O(1) (持有節點引用)
併發環境CopyOnWriteArrayList寫時復制,讀無鎖,適合讀多寫少

常見坑點避雷

  1. subList 返回視圖,對原列表結構修改會失效,需 new ArrayList<>(sub) 斷開。
  2. remove(Object) 依賴 equals(),自定義類必須正確覆寫 equals/hashCode。
  3. 遍歷中刪除:for (Iterator it = list.iterator(); it.hasNext(); ) { if (cond) it.remove(); } 或反向 for 循環。
  4. toArray() 無參返回 Object[],不可強轉;必須用 toArray(new T[0])。
  5. Arrays.asList 返回固定大小列表,不可增刪,底層數組修改會反映到列表。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved