Java 中表示數據集的常用集合類
Java 集合框架提供了多種數據結構來表示和操作數據集,每種集合類都有其特定的用途和性能特征。以下是主要的集合類及其特點:
一、List 接口及其實現類
1. ArrayList
- 特點:基于動態數組實現
- 優點:隨機訪問快,尾部插入/刪除快
- 缺點:中間插入/刪除慢
- 使用場景:需要頻繁按索引訪問元素
List<String> arrayList = new ArrayList<>();
arrayList.add("Apple");
arrayList.add("Banana");
String fruit = arrayList.get(0); // 快速隨機訪問
2. LinkedList
- 特點:基于雙向鏈表實現
- 優點:頭部/中間插入刪除快
- 缺點:隨機訪問慢
- 使用場景:需要頻繁在頭部/中間插入刪除
List<String> linkedList = new LinkedList<>();
linkedList.addFirst("First"); // 頭部插入高效
linkedList.removeLast(); // 尾部刪除高效
二、Set 接口及其實現類
1. HashSet
- 特點:基于哈希表實現,使用HashMap存儲元素
- 優點:添加、刪除、查找操作快
- 缺點:無序,遍歷順序不確定
- 使用場景:需要快速查找且不關心順序
Set<String> hashSet = new HashSet<>();
hashSet.add("Red");
hashSet.add("Green");
boolean contains = hashSet.contains("Red"); // 快速查找
2. TreeSet
- 特點:基于紅黑樹實現,元素按自然順序或Comparator排序
- 優點:自動排序,范圍查找高效
- 缺點:插入/刪除比HashSet慢(O(log n))
- 使用場景:需要有序且唯一元素的集合
Set<Integer> treeSet = new TreeSet<>();
treeSet.add(5);
treeSet.add(2);
treeSet.add(8); // 自動排序為 [2, 5, 8]
3. LinkedHashSet
- 特點:繼承HashSet,但維護插入順序的鏈表
- 優點:保持插入順序,查找效率接近HashSet
- 使用場景:需要保持插入順序且快速查找
Set<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("First");
linkedHashSet.add("Second"); // 保持插入順序
三、Map 接口及其實現類
1. HashMap
- 特點:基于哈希表的鍵值對存儲
- 優點:查找、插入、刪除操作快
- 缺點:無序
- 使用場景:需要快速查找鍵值對
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Apple", 10);
int count = hashMap.get("Apple"); // 快速查找
2. TreeMap
- 特點:基于紅黑樹實現,按鍵的自然順序或Comparator排序
- 優點:按鍵排序,范圍操作高效
- 缺點:插入/刪除比HashMap慢(O(log n))
- 使用場景:需要有序的鍵值對集合
Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("Orange", 5);
treeMap.put("Apple", 10); // 按鍵排序: Apple, Orange
3. LinkedHashMap
- 特點:繼承HashMap,但維護插入順序或訪問順序
- 優點:保持插入/訪問順序,查找效率接近HashMap
- 使用場景:需要保持順序的鍵值對集合
Map<String, Integer> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("First", 1);
linkedHashMap.put("Second", 2); // 保持插入順序
四、集合類的選擇指南
需求 | 推薦集合類 | 原因 |
---|---|---|
需要按索引訪問 | ArrayList | 隨機訪問O(1) |
頻繁在頭部/中間插入刪除 | LinkedList | 插入刪除O(1) |
需要唯一元素且不關心順序 | HashSet | 查找O(1) |
需要唯一元素且有序 | TreeSet | 自動排序 |
需要保持插入順序的集合 | LinkedHashSet | 維護插入順序鏈表 |
鍵值對存儲,快速查找 | HashMap | 查找O(1) |
需要按鍵排序的鍵值對 | TreeMap | 紅黑樹維持順序 |
需要保持插入順序的鍵值對 | LinkedHashMap | 維護插入順序鏈表 |