首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java SE 集合框架核心接口與實現類全景圖解

     編輯:Java 綜合教學

集合體系繼承關係

Iterable
  └── Collection
        ├── List (有序、可重複)
        │     ├── ArrayList
        │     ├── LinkedList
        │     ├── Vector (同步)
        │     └── Stack
        ├── Set (無序、唯一)
        │     ├── HashSet
        │     ├── LinkedHashSet
        │     └── SortedSet → TreeSet
        └── Queue (FIFO)
              ├── PriorityQueue
              ├── ArrayDeque
              └── LinkedList
Map (鍵值對、Key唯一)
  ├── HashMap
  ├── Hashtable (同步)
  ├── LinkedHashMap
  └── SortedMap → TreeMap

核心接口詳解

Iterable & Iterator

// Iterable
Iterator<T> iterator();

// Iterator
boolean hasNext();
E next();
void remove();

Collection 基礎操作

  • add/remove/contains/size/isEmpty/clear
  • 批量操作:addAll/removeAll/retainAll/containsAll
  • 轉數組:toArray()
  • 相等比較:equals/hashCode

List 接口特有功能

  • 索引操作:get/set/add/remove/indexOf/lastIndexOf
  • 範圍視圖:subList(from, to)
  • 雙向迭代器:ListIterator(支持 previous/add/set)

Set 接口特點

  • 不允許重複元素(equals 判定)
  • 最多一個 null

Queue/Deque 接口

  • Queue:offer/poll/peek
  • Deque:雙端操作 addFirst/addLast/removeFirst/removeLast

Map 接口

  • 鍵值對集合,Key 唯一
  • 核心方法:put/get/remove/containsKey/containsValue/keySet/values/entrySet
  • SortedMap 保證 Key 有序

主要實現類對比

類底層結構線程安全有序性Null值特點
ArrayList動態數組否插入序允許隨機訪問快
LinkedList雙向鏈表否插入序允許增刪快,實現 Deque
Vector動態數組是插入序允許舊類,擴容 2倍
Stack繼承 Vector是插入序允許LIFO,push/pop/peek
HashSetHashMap否無序一個O(1) 增刪查
LinkedHashSetLinkedHashMap否插入序一個維護雙向鏈表
TreeSet紅黑樹否自然序/比較器不允許O(log n),NavigableSet
HashMap數組+鏈表/紅黑樹否無序允許JDK8 樹化優化
TreeMap紅黑樹否Key有序Key不允許NavigableMap

線程安全包裝器

List<T> syncList = Collections.synchronizedList(new ArrayList<>());
Set<T> syncSet = Collections.synchronizedSet(new HashSet<>());
Map<K,V> syncMap = Collections.synchronizedMap(new HashMap<>());
// 迭代時需手動同步鎖定集合對象

常用工具方法

  • Arrays.asList(T...):定長 List,修改元素影響原數組
  • Collections.sort/binarySearch:排序與二分查找
  • Comparable/Comparator:自然序與定製序

代碼示例精選

ListIterator 雙向遍歷與修改

ListIterator<Integer> it = list.listIterator();
while (it.hasNext()) System.out.print(it.next() + " ");
it.set(-1); // 修改最後訪問元素
while (it.hasPrevious()) System.out.print(it.previous() + " ");

TreeSet 自定義比較器

TreeSet<Person> ts = new TreeSet<>(Comparator.comparingInt(Person::getAge));
ts.add(new Person(1, 25));
ts.add(new Person(2, 20)); // 按年齡升序

Vector 與 Enumeration

Enumeration<Integer> e = vector.elements();
while (e.hasMoreElements()) System.out.print(e.nextElement() + " ");

選型建議

  • 高頻隨機讀 → ArrayList
  • 高頻頭尾增刪 → LinkedList/ArrayDeque
  • 去重 + 無序 → HashSet
  • 去重 + 有序 → TreeSet/LinkedHashSet
  • 鍵值映射 → HashMap(非線程安全)/ ConcurrentHashMap(並發)
  • 需要同步 → 並發包下對應類優於 Vector/Hashtable
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved