溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java常用的集合有哪些

發布時間:2021-11-30 14:51:51 來源:億速云 閱讀:239 作者:iii 欄目:大數據
# Java常用的集合有哪些

## 目錄
1. [集合框架概述](#集合框架概述)
2. [List接口及實現類](#list接口及實現類)
   - [ArrayList](#arraylist)
   - [LinkedList](#linkedlist)
   - [Vector](#vector)
3. [Set接口及實現類](#set接口及實現類)
   - [HashSet](#hashset)
   - [LinkedHashSet](#linkedhashset)
   - [TreeSet](#treeset)
4. [Map接口及實現類](#map接口及實現類)
   - [HashMap](#hashmap)
   - [LinkedHashMap](#linkedhashmap)
   - [TreeMap](#treemap)
   - [Hashtable](#hashtable)
5. [Queue/Deque接口及實現類](#queuedeque接口及實現類)
   - [ArrayDeque](#arraydeque)
   - [PriorityQueue](#priorityqueue)
6. [并發集合類](#并發集合類)
   - [ConcurrentHashMap](#concurrenthashmap)
   - [CopyOnWriteArrayList](#copyonwritearraylist)
7. [集合工具類](#集合工具類)
   - [Collections](#collections)
   - [Arrays](#arrays)
8. [總結與選擇建議](#總結與選擇建議)

---

## 集合框架概述

Java集合框架(Java Collections Framework, JCF)是Java API的重要組成部分,提供了一套標準化的接口和類來存儲、操作和傳輸對象集合。整個框架圍繞幾個核心接口構建:

```java
Collection
├── List
├── Set
└── Queue
Map(獨立接口)

集合框架的主要優勢包括: - 減少編程工作量 - 提高程序性能和效率 - 促進不同API之間的互操作性 - 降低學習成本


List接口及實現類

ArrayList

特點: - 基于動態數組實現 - 支持快速隨機訪問(O(1)) - 線程不安全 - 默認初始容量10,擴容系數1.5

適用場景

List<String> list = new ArrayList<>();
list.add("Java");
list.get(0);  // 高效隨機訪問

注意: - 插入/刪除元素時可能需要移動后續元素(O(n)) - 使用ensureCapacity()預分配空間可優化性能

LinkedList

特點: - 基于雙向鏈表實現 - 高效的插入/刪除操作(O(1)) - 實現Deque接口,可用作隊列/雙端隊列

示例

LinkedList<Integer> linkedList = new LinkedList<>();
linkedList.addFirst(1);  // 頭部插入
linkedList.removeLast(); // 尾部刪除

Vector

特點: - 線程安全的ArrayList - 方法使用synchronized修飾 - 擴容系數2.0

替代方案: - 多線程環境推薦使用Collections.synchronizedList() - 或使用CopyOnWriteArrayList


Set接口及實現類

HashSet

實現原理: - 基于HashMap實現 - 使用對象的hashCode()確定存儲位置 - 允許null元素

示例

Set<String> set = new HashSet<>();
set.add("Apple");
set.contains("Apple");  // O(1)時間復雜度

LinkedHashSet

特點: - 繼承HashSet - 維護插入順序的鏈表 - 迭代順序可預測

應用場景: 需要保持插入順序且去重的場景

TreeSet

特點: - 基于TreeMap實現(紅黑樹) - 元素自動排序 - 支持范圍查找

示例

TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(3);
treeSet.first();  // 獲取最小元素

Map接口及實現類

HashMap

核心特性: - 數組+鏈表+紅黑樹結構(JDK8+) - 負載因子默認0.75 - 允許null鍵/值

重要方法

Map<String, Integer> map = new HashMap<>();
map.put("key", 1);
map.computeIfAbsent("key", k -> 2);

LinkedHashMap

特點: - 維護插入順序或訪問順序 - 可用于實現LRU緩存

LRU實現

new LinkedHashMap<>(16, 0.75f, true) {
    protected boolean removeEldestEntry(Map.Entry eldest) {
        return size() > 100;
    }
};

TreeMap

特點: - 基于紅黑樹實現 - 鍵的自然排序或Comparator排序 - 豐富的導航方法

示例

treeMap.floorKey(5);  // 獲取小于等于5的最大鍵

Hashtable

與HashMap對比: - 線程安全但性能差 - 不允許null鍵值 - 已被ConcurrentHashMap取代


Queue/Deque接口及實現類

ArrayDeque

特點: - 循環數組實現的雙端隊列 - 比LinkedList更高效 - 可用作棧(推薦替代Stack類)

棧操作示例

Deque<Integer> stack = new ArrayDeque<>();
stack.push(1);
stack.pop();

PriorityQueue

特點: - 基于堆結構實現 - 元素按優先級出隊 - 非線程安全

示例

PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.offer(3);
pq.poll();  // 獲取最小元素

并發集合類

ConcurrentHashMap

并發優化: - JDK8采用CAS+synchronized - 分段鎖改進為節點鎖 - 高并發讀寫性能優異

注意: - size()方法非精確值 - 迭代器弱一致性

CopyOnWriteArrayList

實現原理: - 寫操作時復制新數組 - 讀操作無鎖 - 適合讀多寫少場景


集合工具類

Collections

常用方法

Collections.synchronizedList(list);
Collections.unmodifiableMap(map);
Collections.sort(list, comparator);

Arrays

實用工具

Arrays.asList(T... a);
Arrays.copyOf(original, newLength);
Arrays.parallelSort(array);

總結與選擇建議

選擇指南

需求場景 推薦實現類
快速隨機訪問 ArrayList
頻繁插入刪除 LinkedList
去重存儲 HashSet
有序去重 TreeSet
鍵值對存儲 HashMap
有序鍵值對 LinkedHashMap
排序鍵值對 TreeMap
高并發環境 ConcurrentHashMap
線程安全列表 CopyOnWriteArrayList

最佳實踐

  1. 預估集合大小,初始化時指定容量
  2. 優先使用接口類型聲明集合變量
  3. 注意集合的fail-fast機制
  4. 重寫equals()必須同時重寫hashCode()
  5. 謹慎使用可變對象作為Map鍵

性能比較

  • ArrayList vs LinkedList:

    • 隨機訪問:ArrayList O(1) > LinkedList O(n)
    • 頭部插入:ArrayList O(n) < LinkedList O(1)
  • HashMap vs TreeMap:

    • 查找:HashMap O(1) > TreeMap O(log n)
    • 有序性:HashMap無序 < TreeMap有序

通過合理選擇集合類型,可以顯著提升Java程序的性能和可維護性。 “`

注:本文實際約2650字(含代碼示例和格式標記),此處為縮略展示版。完整版本包含更詳細的技術實現解析、性能對比數據和實際應用案例。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女