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

Java List 集合 12 大核心操作全攻略:增刪改查、截取、去重、轉換一網打盡

     編輯:Java 綜合教學

List 接口核心方法速查表

分類方法說明時間複雜度
增add(E e)尾部追加O(1) 均攤
add(int index, E e)指定位置插入,後續元素右移O(n)
addAll(Collection<? extends E> c)批量追加O(m)
刪remove(int index)按索引刪除,返回被刪元素O(n)
remove(Object o)按內容刪除首個匹配,返回 booleanO(n)
clear()清空列表O(n)
改set(int index, E e)替換指定位置元素,返回舊值O(1)
replaceAll(UnaryOperator<E> op)函數式替換所有元素O(n)
查get(int index)按索引獲取O(1)
indexOf(Object o)首次出現索引,無則 -1O(n)
lastIndexOf(Object o)最後出現索引O(n)
contains(Object o)是否包含元素O(n)
其他size(), isEmpty(), iterator(), toArray(), subList()常用輔助方法-

實戰代碼演示(含輸出註解)

List<String> list = new ArrayList<>();
// 1. 添加/獲取/刪除
list.add("Jack");  // [Jack]
list.add("Peter"); // [Jack, Peter]
list.add("Annie"); // [Jack, Peter, Annie]
list.remove(1);    // [Jack, Annie]  刪除索引1 Peter
list.remove("Annie"); // [Jack]       刪除內容 Annie
String name = list.get(0); // Jack

// 2. 包含判斷
List<String> fruits = Arrays.asList("蘋果", "香蕉", "桃子");
boolean hasApple = fruits.contains("蘋果"); // true

// 3. 替換 vs 插入區別
List<String> people = new ArrayList<>(Arrays.asList("白龍馬", "沙和尚", "八戒"));
people.set(0, "唐僧");     // [唐僧, 沙和尚, 八戒] 替換索引0
people.add(1, "悟空");     // [唐僧, 悟空, 沙和尚, 八戒] 插入索引1,原元素後移

// 4. 索引查詢
List<String> names = Arrays.asList("劉備", "關羽", "張飛", "劉備", "張飛");
names.indexOf("劉備");     // 0  首次
names.lastIndexOf("劉備"); // 3  最後

// 5. 截取子列表(視圖,非拷貝!)
List<String> phones = new ArrayList<>(Arrays.asList("三星", "蘋果", "錘子", "華為", "小米"));
List<String> sub = phones.subList(1, 4); // [蘋果, 錘子, 華為] 包含1,不含4
// 注意:sub 是視圖,修改 sub 會影響 phones,序列化會失敗

// 6. 列表比較
List<String> a = Arrays.asList("1", "2");
List<String> b = Arrays.asList("1", "2");
a.equals(b);        // true 內容順序全等
a.hashCode() == b.hashCode(); // true 但反向不成立

// 7. 空判斷
list.isEmpty(); // false

// 8. 迭代器
Iterator<String> it = list.iterator();

// 9. 轉字符串
list.toString(); // "[Jack]"

// 10. 轉數組
Object[] arr = list.toArray();           // Object[]
String[] strArr = list.toArray(new String[0]); // String[] 推薦寫法

// 11. 類型轉換
List<Object> objList = new ArrayList<>(list); // 向上轉型
List<StringBuilder> sbList = list.stream()
    .map(StringBuilder::new).collect(Collectors.toList()); // 指定類型

高頻坑點避雷

  1. subList 視圖特性:非獨立拷貝,原列表結構修改會導致子列表失效(拋 ConcurrentModificationException)。需獨立拷貝用 new ArrayList<>(subList)
  2. 遍歷中刪除:for 循環 remove 導致索引錯位,必須用 Iterator.remove() 或逆序循環
  3. List 去重:new ArrayList<>(new LinkedHashSet<>(list)) 保持順序;Java 10+ list.stream().distinct().collect(toList())
  4. Arrays.asList 陷阱:返回固定長度列表,不支持 add/remove,需 new ArrayList<>(Arrays.asList(...))

性能選型指南

場景推薦實現理由
頻繁隨機訪問、少量增刪ArrayList底層數組,get/set O(1)
頻繁頭尾增刪、併發場景LinkedList / ConcurrentLinkedDeque鏈表結構,無擴容拷貝
線程安全、高併發讀寫CopyOnWriteArrayList寫時復制,讀無鎖
大數據量、內存敏感ArrayList + ensureCapacity預分配減少擴容

List 是 Java 集合框架使用率最高的接口,吃透其 API 特性與底層實現差異,能讓業務代碼更簡潔、性能更穩健。

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