Java List 集合詳解:從基礎到實戰,掌握 Java 列表操作全貌

作為一名 Java 開發工程師,你一定在項目中頻繁使用過 List 集合。它是 Java 集合框架中最常用、最靈活的數據結構之一。無論是從數據庫查詢出的數據,還是前端傳遞的參數列表,List 都是處理這些數據的首選結構。

本文將帶你全面掌握:

  • List?接口的核心方法與特性
  • 常見實現類(如?ArrayListLinkedListVectorCopyOnWriteArrayList
  • List?的遍歷、增刪改查、排序、線程安全等操作
  • List?在實際業務中的應用場景
  • List?與數組、集合工具類(如?Arrays.asList()Collections)的結合使用
  • 最佳實踐與常見誤區

并通過豐富的代碼示例和真實項目場景講解,幫助你寫出更高效、結構更清晰的 Java 列表代碼。


🧱 一、什么是?List?集合?

List 是 Java 集合框架中 Collection 接口的子接口,表示一個有序、可重復、可通過索引訪問的元素集合。

??List?的核心特性:

特性描述
有序元素按照插入順序存儲
可重復允許添加重復元素
可索引訪問支持通過?get(index)?獲取元素
可動態擴容如?ArrayList?會自動擴容
支持泛型推薦使用泛型來保證類型安全

🔍 二、List?的常見實現類

實現類特點適用場景
ArrayList基于數組實現,查詢快,增刪慢默認列表實現,適合頻繁讀取
LinkedList基于鏈表實現,增刪快,查詢慢插入刪除頻繁、隊列操作
Vector線程安全,性能較低舊版本遺留類,建議使用?Collections.synchronizedList()
CopyOnWriteArrayList線程安全,寫時復制,讀操作不加鎖多讀少寫的并發場景

🧠 三、List?的基本操作

? 1. 創建與初始化

// 使用 ArrayList 初始化
List<String> list = new ArrayList<>();// 靜態初始化
List<String> list2 = Arrays.asList("Java", "Python", "C++");// 不可變列表(Java 9+)
List<String> list3 = List.of("A", "B", "C");

? 2. 添加元素

list.add("Java");            // 添加到末尾
list.add(0, "Go");           // 插入到指定索引
list.addAll(Arrays.asList("Python", "JavaScript")); // 添加集合

? 3. 刪除元素

list.remove("Java");         // 按值刪除
list.remove(0);              // 按索引刪除
list.clear();                // 清空列表

? 4. 修改元素

list.set(0, "Kotlin");       // 替換指定索引的元素

? 5. 查詢元素

String first = list.get(0);  // 獲取指定索引元素
boolean contains = list.contains("Java"); // 是否包含某個元素
int index = list.indexOf("Java");         // 查找元素索引

? 6. 遍歷方式對比

遍歷方式示例特點
普通 for 循環for (int i = 0; i < list.size(); i++)支持索引操作
增強 for 循環for (String s : list)簡潔易讀
Iterator 迭代器Iterator<String> it = list.iterator(); while (it.hasNext())支持在遍歷中刪除
Stream 流式處理list.stream().forEach(System.out::println)支持過濾、映射、排序等操作

🔁 四、List?的高級操作

? 1. 排序

// 默認排序(升序)
list.sort(null);// 自定義排序(降序)
list.sort(Collections.reverseOrder());// 使用 Lambda 表達式排序
list.sort((a, b) -> b.compareTo(a));

? 2. 反轉與洗牌

Collections.reverse(list); // 反轉列表
Collections.shuffle(list); // 打亂順序(隨機排列)

? 3. 子列表與替換

List<String> subList = list.subList(0, 3); // 獲取子列表 [0, 3)
Collections.replaceAll(list, "Java", "JVM"); // 替換所有匹配元素

? 4. 轉換為數組

String[] array = list.toArray(new String[0]);

? 5. 合并與去重

List<String> combined = new ArrayList<>();
combined.addAll(list1);
combined.addAll(list2);Set<String> unique = new LinkedHashSet<>(combined);
List<String> deduplicated = new ArrayList<>(unique);

🧪 五、List?的實際應用場景

場景1:從數據庫查詢結果封裝為?List

List<User> users = new ArrayList<>();
try (ResultSet rs = statement.executeQuery("SELECT * FROM users")) {while (rs.next()) {User user = new User(rs.getString("name"), rs.getInt("age"));users.add(user);}
}

場景2:前端參數接收(Spring Boot)

@PostMapping("/save")
public void saveUsers(@RequestBody List<User> users) {userService.saveAll(users);
}

場景3:使用?List?實現簡單的緩存

List<CacheItem> cache = new ArrayList<>();public void put(String key, String value) {cache.add(new CacheItem(key, value));
}public String get(String key) {return cache.stream().filter(item -> item.getKey().equals(key)).map(CacheItem::getValue).findFirst().orElse(null);
}

場景4:多線程安全的?List

List<String> list = Collections.synchronizedList(new ArrayList<>());
// 或者
List<String> list = new CopyOnWriteArrayList<>();

🚫 六、常見誤區與注意事項

誤區正確做法
在遍歷中直接刪除元素使用?Iterator.remove()
使用?==?比較字符串元素使用?equals()?或?Objects.equals()
忘記初始化?List?就使用先?new ArrayList<>()
忘記處理?null?元素List?允許添加?null,但某些操作會拋出異常
忽略線程安全問題多線程建議使用?CopyOnWriteArrayList?或同步包裝
錯誤使用?List.of()?修改列表List.of(...)?是不可變列表,修改會拋出異常

📊 七、List?核心知識點一覽表

內容說明
接口定義List<E>
常用實現類ArrayListLinkedListCopyOnWriteArrayList
核心方法add、remove、set、get、size、contains、indexOf
遍歷方式普通 for、增強 for、Iterator、Stream
常用操作排序、反轉、子列表、合并、去重
線程安全Collections.synchronizedList()CopyOnWriteArrayList
應用場景數據庫結果集、前端參數接收、緩存、任務隊列

📎 八、附錄:List?常用技巧速查表

技巧示例
創建只讀列表Collections.unmodifiableList(list)
同步列表Collections.synchronizedList(new ArrayList<>())
列表轉數組list.toArray(new String[0])
判斷是否為空list.isEmpty()
獲取最大最小值Collections.max(list)?/?Collections.min(list)
列表反轉Collections.reverse(list)
列表洗牌Collections.shuffle(list)
替換所有元素Collections.replaceAll(list, "old", "new")
使用 Stream 過濾list.stream().filter(s -> s.startsWith("A")).toList()
使用 Stream 轉換list.stream().map(String::toUpperCase).toList()

如果你正在準備一篇面向初學者的技術博客,或者希望系統回顧 Java 基礎知識,這篇文章將為你提供完整的知識體系和實用的編程技巧。

歡迎點贊、收藏、轉發,也歡迎留言交流你在實際項目中遇到的 List 集合相關問題。我們下期再見 👋

📌 關注我,獲取更多Java核心技術深度解析!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89212.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89212.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89212.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SGMD辛幾何模態分解 直接替換Excel運行包含頻譜圖相關系數圖 Matlab語言!

SGMD辛幾何模態分解 直接替換Excel運行包含頻譜圖相關系數圖 Matlab語言算法近幾年剛提出&#xff0c;知網還沒幾個人用&#xff0c;你先用&#xff0c;你就是創新&#xff01;算法新穎小眾&#xff0c;用的人很少&#xff0c;包含分解圖、頻譜圖、相關系數圖&#xff0c;效果如…

Oracle數據泵詳解——讓數據遷移像“點外賣”一樣簡單?

?今天我想和大家聊一個數據庫領域的“萬能搬運工”——Oracle數據泵&#xff08;Data Pump&#xff09;?。相信很多人都有過這樣的經歷&#xff1a;業務要上線新系統&#xff0c;得把舊庫的數據搬到新環境&#xff1b;或者領導突然要一份3年前的歷史數據&#xff0c;可不能影…

Leetcode 03 java

爬樓梯算法現在只看明白動態規劃&#xff0c;也沒有很難喲&#xff01;&#xff01;題目70. 爬樓梯假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢&#xff1f;java題解class Solution {public int climbStairs(…

怎么刪除 wps 的右鍵菜單

打開 WPS 點擊 WPS Office 選項卡&#xff0c;點擊右側全局配置》配置和修復工具點擊高級功能定制下的都可以關閉和隱藏點擊確定就可以了。

C++:list

一&#xff0c;list的介紹1&#xff0c;list初步&#xff08;1&#xff09;list是 C 標準模板庫 (STL) 中的一個雙向鏈表容器。它允許在常數時間內進行任意位置的插入和刪除操作&#xff0c;但不支持隨機訪問。&#xff08;2&#xff09;list容器的底層數據結構為帶頭雙向循環鏈…

深入理解Collections.addAll方法

文章目錄深入理解Collections.addAll方法概述方法定義基本用法1. 向List添加元素2. 向Set添加元素3. 添加數組元素與傳統add方法的比較使用傳統add方法使用Collections.addAll性能考慮注意事項實際應用場景與Collection.addAll的區別最佳實踐總結深入理解Collections.addAll方法…

CISP-PTE 練習題(完整一套)

目錄 1、SQL注入 2、文件上傳 3、文件包含 4、代碼審計 5、命令執行 6、端口掃描 7、sql 寫 webshell 8、3389 遠程桌面利用 1、SQL注入 sqllabs-less-24 二次注入 2、文件上傳 沒有對文件后綴進行檢測&#xff0c;但是對文件類型有檢測&#xff0c;需要使用圖片頭繞…

Vue3入門-計算屬性+監聽器

&#x1f3e0;個人主頁&#xff1a;Yui_ &#x1f351;操作環境&#xff1a;vscode\node.js &#x1f680;所屬專欄&#xff1a;Vue3 文章目錄1. 計算屬性1.1 computed函數1.2 計算屬性VS普通函數1.3 計算屬性的完整寫法2. 監聽器3.總結1. 計算屬性 計算屬性&#xff08;compu…

Linux Swap區深度解析:為何禁用?何時需要?

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄前言一、Swap區&#xff1a;Linux的"內存救生圈"二、為什么要禁用Swap&#xff1f;性能的隱形殺手三、何時應該使用Swap&#xff1f;不可或缺的場景四、如…

用TensorFlow進行邏輯回歸(三)

邏輯回歸Logistic regression這個腳本展示如何用TensorFlow求解邏輯回歸。 ()ysigmoid(Axb)我們使用低出生重量數據,特別地:y 0 or 1 low birth weightx demographic and medical history dataimport matplotlib.pyplot as pltimport numpy as npimport tensorflow as tfimp…

mingw 編譯 assimp v6.0.2 解決編譯報錯

mingw 編譯 assimp v6.0.2 理論上看這個就能滿足&#xff1a;在Windows下使用CMakeMinGW64編譯Assimp庫 環境變量問題 i386 architecture of input file CMakeFiles\assimp.dir/objects.a(assimp.rc.obj)’ is incompatible with i386:x86-64 output collect2.exe: error: ld r…

Windows 11清理C盤方法大全:磁盤清理/禁用休眠/系統還原點/優化大師使用教程

Windows 11清理C盤方法1. 使用磁盤清理工具步驟&#xff1a;按 Win S 搜索“磁盤清理”&#xff0c;打開工具。選擇C盤&#xff0c;點擊“確定”。勾選需要清理的文件類型&#xff08;如臨時文件、系統錯誤內存轉儲等&#xff09;&#xff0c;點擊“確定”。確認刪除操作&…

Rabbitmq Direct Exchange(直連交換機)多個消費者,配置相同的key ,隊列,可以保證只有一個消費者消費嗎

思考可以保證消費不被重復消費&#xff0c;因為通過輪詢一個消息只會投遞給一個消費者。但是不是一個消費者消費&#xff0c;而是多個輪詢消費在 RabbitMQ 中&#xff0c;如果多個消費者&#xff08;Consumers&#xff09;同時訂閱 同一個隊列&#xff08;Queue&#xff09;&am…

設計模式是什么呢?

1.掌握設計模式的層次第一層&#xff1a;剛剛學編程不久&#xff0c;聽說過什么是設計模式。第二層&#xff1a;有很長時間的編程經驗&#xff0c;自己寫過很多代碼&#xff0c;其中用到了設計模式&#xff0c;但是自己不知道。第三層&#xff1a;學習過設計模式&#xff0c;發…

ThreadLocal使用詳解-從源碼層面分析

從demo入手看效果 代碼Demostatic ThreadLocal tl1 new ThreadLocal();static ThreadLocal tl2 new ThreadLocal();static ThreadLocal tl3 new ThreadLocal();public static void main(String[] args) {tl1.set("123");tl2.set("456");tl3.set("4…

CPO:對比偏好優化—突破大型語言模型在機器翻譯中的性能邊界

溫馨提示&#xff1a; 本篇文章已同步至"AI專題精講" CPO&#xff1a;對比偏好優化—突破大型語言模型在機器翻譯中的性能邊界 摘要 中等規模的大型語言模型&#xff08;LLMs&#xff09;&#xff0c;如參數量為 7B 或 13B 的模型&#xff0c;在機器翻譯&#xff0…

執行shell 腳本 如何將日志全部輸出到文件

在執行 Shell 腳本時&#xff0c;如果需要將 所有輸出&#xff08;包括標準輸出 stdout 和錯誤輸出 stderr&#xff09; 重定向到日志文件&#xff0c;可以使用以下方法&#xff1a;方法 1&#xff1a;直接重定向&#xff08;推薦&#xff09; /appdata/mysql_backup_dump.sh &…

Postman接口測試實現UI自動化測試

Selenium底層原理 3天精通Postman接口測試&#xff0c;全套項目實戰教程&#xff01;&#xff01;運行代碼&#xff0c;啟動瀏覽器后&#xff0c;webdriver會將瀏覽器綁定到特定的端口&#xff0c;作為webdriver的remote server&#xff08;遠程服務端&#xff09;&#xff0c;…

CSS動畫與變換全解析:從原理到性能優化的深度指南

引言&#xff1a;現代Web動畫的技術革命 在當今的Web體驗中&#xff0c;流暢的動畫效果已成為用戶交互的核心要素。根據Google的研究&#xff0c;60fps的動畫可以使用戶參與度提升53%&#xff0c;而卡頓的界面會導致跳出率增加40%。本文將深入剖析CSS動畫&#xff08;animation…

NPM組件 @ivy-shared-components/iconslibrary 等竊取主機敏感信息

【高危】NPM組件 ivy-shared-components/iconslibrary 等竊取主機敏感信息 漏洞描述 當用戶安裝受影響版本的 ivy-shared-components/iconslibrary 等NPM組件包時會竊取用戶的主機名、用戶名、工作目錄、IP地址等信息并發送到攻擊者可控的服務器地址。 MPS編號MPS-zh19-e78w…