TreeMap
基本情況
- 實現:基于紅黑樹實現的
NavigableMap
。 - 排序:鍵按自然順序或自定義順序(通過
Comparator
)排序。 - 特性:
- 不允許
null
鍵,但允許null
值。 - 保證鍵有序。
- 迭代時按排序順序。
- 復雜度:基本操作如
put
、get
、remove
復雜度為 O(log n)。
- 不允許
使用場景
- 需要按鍵有序的映射。
- 需要快速查找范圍查詢(如獲取某區間的鍵值對)。
- 需要按排序順序迭代鍵值對。
TreeSet
基本情況
- 實現:基于
TreeMap
實現。 - 排序:元素按自然順序或自定義順序(通過
Comparator
)排序。 - 特性:
- 不允許
null
元素。 - 保證元素有序。
- 迭代時按排序順序。
- 復雜度:基本操作如
add
、remove
、contains
復雜度為 O(log n)。
- 不允許
使用場景
- 需要保持元素有序的集合。
- 需要快速查找范圍查詢(如獲取某區間的元素)。
- 需要按排序順序迭代。
HashMap
基本情況
- 實現:基于哈希表實現的
Map
。 - 排序:無序。
- 特性:
- 允許
null
鍵和null
值。 - 不保證順序,元素順序可能隨時間變化。
- 復雜度:基本操作如
put
、get
、remove
復雜度為 O(1)。
- 允許
使用場景
- 需要快速查找、插入和刪除的映射。
- 不關心元素順序。
HashSet
基本情況
- 實現:基于
HashMap
實現。 - 排序:無序。
- 特性:
- 允許
null
元素。 - 不保證順序,元素順序可能隨時間變化。
- 復雜度:基本操作如
add
、remove
、contains
復雜度為 O(1)。
- 允許
使用場景
- 需要快速查找、插入和刪除的集合。
- 不關心元素順序。
比較與對比
相同點
-
TreeSet
與TreeMap
:- 都基于紅黑樹實現,保證元素/鍵有序。
- 復雜度相同:基本操作復雜度為 O(log n)。
-
HashSet
與HashMap
:- 都基于哈希表實現,不保證元素/鍵有序。
- 復雜度相同:基本操作復雜度為 O(1)。
不同點
-
有序 vs 無序:
TreeSet
和TreeMap
保證元素/鍵有序。HashSet
和HashMap
不保證元素/鍵有序。
-
允許
null
的情況:TreeSet
不允許null
元素。TreeMap
不允許null
鍵,但允許null
值。HashSet
允許null
元素。HashMap
允許null
鍵和null
值。
-
使用場景:
TreeSet
和TreeMap
適用于需要排序的場景,且支持范圍查詢。HashSet
和HashMap
適用于需要快速查找、插入和刪除的場景,不關心元素順序。
總結
選擇 TreeSet
、TreeMap
、HashSet
或 HashMap
取決于具體需求:
- 需要有序集合/映射,范圍查詢:選擇
TreeSet
或TreeMap
。 - 需要快速查找、插入和刪除,無序要求:選擇
HashSet
或HashMap
。
理解各自的特性和使用場景,能夠更高效地解決問題。