🤟致敬讀者
- 🟩感謝閱讀🟦笑口常開🟪生日快樂?早點睡覺
📘博主相關
- 🟧博主信息🟨博客首頁🟫專欄推薦🟥活動信息
文章目錄
- JavaSE核心知識點03高級特性03-01(集合框架)
- 一、什么是集合框架(Collection Framework)?
- 為什么需要集合框架?
- 二、集合框架的核心結構
- 1. **Collection 接口(單列集合)**
- 2. **Map 接口(雙列集合)**
- 三、核心接口詳解與代碼示例
- 1. **List 接口**
- 特點:有序、可重復、可通過索引訪問
- 2. **Set 接口**
- 特點:無序、不可重復(通過`equals()`和`hashCode()`判斷)
- 3. **Map 接口**
- 特點:鍵值對存儲,Key唯一
- 四、集合框架的通用操作
- 1. **遍歷集合**
- 2. **集合工具類 `Collections`**
- 五、如何選擇集合類?
- 六、常見面試問題
- 七、學習路線建議
📃文章前言
- 🔷文章均為學習工作中整理的筆記。
- 🔶如有錯誤請指正,共同學習進步。
JavaSE核心知識點03高級特性03-01(集合框架)
作為Java集合框架的入門學習指南,我將從基礎概念、核心接口、常用實現類、使用場景到代碼示例,逐步為你講解。內容會盡量通俗易懂,配有代碼示例和對比表格,幫助你快速掌握。
一、什么是集合框架(Collection Framework)?
集合框架 是Java中用于存儲和操作一組對象的統一架構。它提供了一套標準化的接口和實現類,解決了數組的局限性(如固定長度、類型單一、操作復雜等)。
為什么需要集合框架?
- 動態擴容:無需手動管理容量
- 類型安全:通過泛型確保數據類型一致
- 高性能操作:提供豐富的API(增刪改查、排序、遍歷等)
- 統一標準:所有集合類遵循相同的接口規范
二、集合框架的核心結構
Java集合框架主要分為兩大類:單列集合(Collection) 和 雙列集合(Map)。
1. Collection 接口(單列集合)
- List:有序、可重復
- 常用實現類:
ArrayList
,LinkedList
,Vector
- 常用實現類:
- Set:無序、不可重復
- 常用實現類:
HashSet
,LinkedHashSet
,TreeSet
- 常用實現類:
- Queue:隊列,先進先出(FIFO)
- 常用實現類:
LinkedList
,PriorityQueue
- 常用實現類:
2. Map 接口(雙列集合)
- 鍵值對(Key-Value)存儲,Key不可重復
- 常用實現類:
HashMap
,LinkedHashMap
,TreeMap
,Hashtable
三、核心接口詳解與代碼示例
1. List 接口
特點:有序、可重復、可通過索引訪問
常用實現類對比:
實現類 | 數據結構 | 特點 |
---|---|---|
ArrayList | 動態數組 | 查詢快,增刪慢(需擴容或移動元素) |
LinkedList | 雙向鏈表 | 增刪快,查詢慢(需遍歷節點) |
Vector | 同步的動態數組 | 線程安全,性能較低(已逐漸被淘汰) |
示例代碼:
// ArrayList示例
List<String> arrayList = new ArrayList<>();
arrayList.add("Apple");
arrayList.add("Banana");
arrayList.add(1, "Orange"); // 在索引1插入元素
System.out.println(arrayList); // [Apple, Orange, Banana]// LinkedList示例
List<Integer> linkedList = new LinkedList<>();
linkedList.add(10);
linkedList.addFirst(5); // 頭部插入
linkedList.addLast(20); // 尾部插入
System.out.println(linkedList.get(1)); // 10
2. Set 接口
特點:無序、不可重復(通過equals()
和hashCode()
判斷)
常用實現類對比:
實現類 | 數據結構 | 特點 |
---|---|---|
HashSet | 哈希表 | 最快查詢,無順序 |
LinkedHashSet | 哈希表+鏈表 | 保留插入順序 |
TreeSet | 紅黑樹 | 自然排序或自定義排序 |
示例代碼:
// HashSet示例
Set<String> hashSet = new HashSet<>();
hashSet.add("Java");
hashSet.add("Python");
hashSet.add("Java"); // 重復元素不會被添加
System.out.println(hashSet); // 輸出順序不確定,如 [Java, Python]// TreeSet示例(自然排序)
Set<Integer> treeSet = new TreeSet<>();
treeSet.add(5);
treeSet.add(2);
treeSet.add(8);
System.out.println(treeSet); // [2, 5, 8]
3. Map 接口
特點:鍵值對存儲,Key唯一
常用實現類對比:
實現類 | 數據結構 | 特點 |
---|---|---|
HashMap | 哈希表 | 最快查詢,無順序(允許null鍵值) |
LinkedHashMap | 哈希表+鏈表 | 保留插入順序或訪問順序 |
TreeMap | 紅黑樹 | 按鍵自然排序或自定義排序 |
Hashtable | 哈希表 | 線程安全,不允許null鍵值(已過時) |
示例代碼:
// HashMap示例
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Alice", 25);
hashMap.put("Bob", 30);
hashMap.put("Alice", 26); // 覆蓋原有值
System.out.println(hashMap.get("Bob")); // 30// TreeMap示例(按鍵排序)
Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("Orange", 5);
treeMap.put("Apple", 3);
System.out.println(treeMap); // {Apple=3, Orange=5}
四、集合框架的通用操作
1. 遍歷集合
-
for-each循環(推薦):
List<String> list = Arrays.asList("A", "B", "C"); for (String s : list) {System.out.println(s); }
-
迭代器(Iterator):
Iterator<String> it = list.iterator(); while(it.hasNext()) {String s = it.next();if (s.equals("B")) it.remove(); // 安全刪除元素 }
2. 集合工具類 Collections
提供靜態方法操作集合:
List<Integer> numbers = new ArrayList<>(Arrays.asList(3,1,4,2));
Collections.sort(numbers); // 排序 → [1,2,3,4]
Collections.reverse(numbers); // 反轉 → [4,3,2,1]
Collections.shuffle(numbers); // 隨機打亂
五、如何選擇集合類?
根據需求選擇最合適的集合:
場景 | 推薦實現類 |
---|---|
快速隨機訪問 | ArrayList |
頻繁插入刪除 | LinkedList |
去重且無需排序 | HashSet |
去重且保留插入順序 | LinkedHashSet |
需要排序 | TreeSet 或 TreeMap |
鍵值對存儲 | HashMap (最常用) |
線程安全場景 | ConcurrentHashMap |
六、常見面試問題
-
ArrayList和LinkedList的區別?
ArrayList
基于動態數組,適合隨機訪問;LinkedList
基于鏈表,適合頻繁增刪。
-
HashMap的工作原理?
- 通過哈希函數計算鍵的哈希值,存儲到對應桶(數組位置),解決哈希沖突使用鏈表或紅黑樹(JDK8+)。
-
如何保證集合的線程安全?
- 使用
Collections.synchronizedList()
包裝,或選擇ConcurrentHashMap
、CopyOnWriteArrayList
等并發集合。
- 使用
七、學習路線建議
- 基礎階段:掌握
ArrayList
、HashMap
、HashSet
的常用操作 - 進階階段:理解底層數據結構(如哈希表、紅黑樹)、泛型、迭代器
- 高級階段:學習線程安全集合、性能優化、
Stream API
操作集合
練習建議:
- 實現一個簡單的學生管理系統(用集合存儲學生信息)
- 統計一篇文章中每個單詞出現的次數(用
HashMap
) - 比較不同集合在10萬次操作下的性能差異
如果有具體問題或需要更多代碼示例,歡迎隨時提問!
📜文末寄語
- 🟠關注我,獲取更多內容。
- 🟡技術動態、實戰教程、問題解決方案等內容持續更新中。
- 🟢《全棧知識庫》技術交流和分享社區,集結全棧各領域開發者,期待你的加入。
- 🔵?加入開發者的《專屬社群》,分享交流,技術之路不再孤獨,一起變強。
- 🟣點擊下方名片獲取更多內容🍭🍭🍭👇