Java 集合
在 Java 編程中,集合框架(java.util
包)是處理一組對象的強大工具。與數組不同,集合提供了更靈活的數據存儲和操作方式。本文將詳細介紹 Java 集合框架的核心接口、常用實現類及其應用場景,幫助你更好地理解和使用集合。
1. 什么是集合?
集合是用于存儲一組對象的容器。Java 集合框架提供了多種數據結構和算法,方便開發者對數據進行增刪改查等操作。集合框架主要分為兩大類:
Collection
接口:用于存儲一組對象。Map
接口:用于存儲鍵值對(key-value)。
2. 集合框架的核心接口
2.1 Collection
接口
Collection
是集合框架的根接口,它有三個主要的子接口:
List
:有序且允許重復元素的集合。Set
:無序且不允許重復元素的集合。Queue
:用于存儲待處理元素的隊列。
2.2 Map
接口
Map
用于存儲鍵值對,鍵(key)是唯一的,值(value)可以重復。常見的實現類有 HashMap
、TreeMap
等。
3. 集合與數組的對比
特性 | 數組 | 集合 |
---|---|---|
容量 | 固定大小 | 動態擴展 |
數據類型 | 可以存儲基本類型和引用類型 | 只能存儲引用類型 |
功能 | 功能有限 | 提供豐富的操作方法 |
適用場景 | 數據量固定且簡單 | 數據量動態變化且復雜 |
4. List
集合
List
是有序且允許重復元素的集合,常用的實現類有 ArrayList
和 LinkedList
。
4.1 ArrayList
ArrayList
是基于動態數組實現的,適合隨機訪問和遍歷。
常用方法:
add(E e)
:添加元素。remove(int index)
:刪除指定位置的元素。get(int index)
:獲取指定位置的元素。set(int index, E element)
:修改指定位置的元素。
示例:
import java.util.ArrayList;
import java.util.List;public class ArrayListDemo {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("Java");list.add("Python");list.add("C++");System.out.println(list); // 輸出: [Java, Python, C++]}
}
4.2 LinkedList
LinkedList
是基于雙向鏈表實現的,適合頻繁的插入和刪除操作。
常用方法:
addFirst(E e)
:在鏈表頭部添加元素。addLast(E e)
:在鏈表尾部添加元素。removeFirst()
:刪除鏈表頭部的元素。removeLast()
:刪除鏈表尾部的元素。
示例:
import java.util.LinkedList;public class LinkedListDemo {public static void main(String[] args) {LinkedList<String> list = new LinkedList<>();list.add("Java");list.addFirst("Python");list.addLast("C++");System.out.println(list); // 輸出: [Python, Java, C++]}
}
5. Set
集合
Set
是無序且不允許重復元素的集合,常用的實現類有 HashSet
和 TreeSet
。
5.1 HashSet
HashSet
是基于哈希表實現的,適合快速查找和去重。
常用方法:
add(E e)
:添加元素。remove(Object o)
:刪除元素。contains(Object o)
:判斷是否包含指定元素。
示例:
import java.util.HashSet;
import java.util.Set;public class HashSetDemo {public static void main(String[] args) {Set<String> set = new HashSet<>();set.add("Java");set.add("Python");set.add("Java"); // 重復元素不會被添加System.out.println(set); // 輸出: [Java, Python]}
}
5.2 TreeSet
TreeSet
是基于紅黑樹實現的,元素會按照自然順序或自定義順序排序。
示例:
import java.util.TreeSet;
import java.util.Set;public class TreeSetDemo {public static void main(String[] args) {Set<String> set = new TreeSet<>();set.add("Java");set.add("Python");set.add("C++");System.out.println(set); // 輸出: [C++, Java, Python]}
}
6. Map
集合
Map
用于存儲鍵值對,常用的實現類有 HashMap
和 TreeMap
。
6.1 HashMap
HashMap
是基于哈希表實現的,適合快速查找和插入。
常用方法:
put(K key, V value)
:添加鍵值對。get(Object key)
:根據鍵獲取值。remove(Object key)
:刪除指定鍵的映射。
示例:
import java.util.HashMap;
import java.util.Map;public class HashMapDemo {public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put("Java", "編程語言");map.put("Python", "腳本語言");System.out.println(map.get("Java")); // 輸出: 編程語言}
}
6.2 TreeMap
TreeMap
是基于紅黑樹實現的,鍵會按照自然順序或自定義順序排序。
示例:
import java.util.TreeMap;
import java.util.Map;public class TreeMapDemo {public static void main(String[] args) {Map<String, String> map = new TreeMap<>();map.put("Java", "編程語言");map.put("Python", "腳本語言");map.put("C++", "系統編程語言");System.out.println(map); // 輸出: {C++=系統編程語言, Java=編程語言, Python=腳本語言}}
}
7. 集合的應用場景
- 動態數據存儲:當數據量不確定時,使用集合比數組更靈活。
- 去重:使用
Set
集合可以輕松實現數據去重。 - 鍵值對存儲:使用
Map
集合可以方便地存儲和查找鍵值對。 - 排序:使用
TreeSet
或TreeMap
可以實現元素的自動排序。
8. 小結
- 集合框架是 Java 中處理一組對象的強大工具,分為
Collection
和Map
兩大類。 List
是有序且允許重復的集合,常用實現類有ArrayList
和LinkedList
。Set
是無序且不允許重復的集合,常用實現類有HashSet
和TreeSet
。Map
是鍵值對的集合,常用實現類有HashMap
和TreeMap
。