一、List集合
????????List 是一種用于存儲有序元素的集合接口,它是 java.util 包中的一部分,并且繼承自 Collection 接口。List 接口提供了多種方法,用于按索引操作元素,允許元素重復,并且保持插入順序。常用的 List 實現類包括 ArrayList、LinkedList 和 Vector。
1.1概述
????????List 接口繼承自 Collection 接口,它支持按索引訪問元素。與 Set 不同,List 允許存儲重復元素,并且可以通過索引獲取、插入和刪除元素。
List 常用方法:
add(E e):將元素 e 添加到列表的末尾。
add(int index, E element):將元素 element 插入到指定的索引位置。
get(int index):返回指定位置的元素。
set(int index, E element):將指定位置的元素替換為新的元素。
remove(int index):刪除指定位置的元素。
remove(Object o):刪除指定的元素。
size():返回列表的元素個數。
isEmpty():檢查列表是否為空。
contains(Object o):檢查列表是否包含指定元素。
indexOf(Object o):返回元素首次出現的位置(如果不包含則返回 -1)。
lastIndexOf(Object o):返回元素最后一次出現的位置。
clear():清空列表。
1.2 實現類
1.2.1 ArrayList
ArrayList 是最常用的 List 實現,它基于動態數組來存儲元素,支持快速的隨機訪問。
優點:
1.提供快速的訪問操作(get 和 set)。
2.插入和刪除元素時,位于末尾的操作非常高效。
缺點:
1.插入和刪除元素時,尤其是對中間位置的元素,性能較差,因為需要移動元素。
1.2.2 LinkedList
LinkedList 是 List 接口的另一個實現,它基于雙向鏈表實現,因此在插入和刪除元素時效率較高,尤其是在列表的頭部和中間位置。
優點:
- 插入和刪除操作(尤其是在頭部或中間位置)性能較好。
- 支持隊列和棧的操作(通過 offer、poll、push 和 pop 方法)。
缺點:
- 隨機訪問性能較差,特別是當需要訪問列表中的元素時,它需要從頭部或尾部開始遍歷。
1.2.3 Vector
Vector 類與 ArrayList 類類似,也基于動態數組實現,但與 ArrayList 的區別在于,Vector 是線程安全的(每個方法都使用 synchronized 關鍵字進行同步)。但由于同步的開銷,它的性能通常較差。
優點:
- 線程安全。
缺點:
- 性能較差,因為所有的方法都進行了同步操作。
- ?不推薦在新代碼中使用。
二、Set集合
Set 是一個不允許重復元素的集合接口。它繼承自 Collection 接口,并且提供了與 List 不同的行為:Set 不保證元素的插入順序,并且不允許包含重復元素。因此,Set 在應用程序中用于需要保證元素唯一性的場景。
Set 接口代表一個集合,主要特點如下:
- 不允許包含重復的元素。
- 不保證元素的順序(但某些實現可能會有順序,如 LinkedHashSet)。
- 基本操作包括添加、刪除和查找元素。
Set 接口的常見實現類包括:
- HashSet:最常用的實現類,基于哈希表,不保證元素的順序。
- LinkedHashSet:與 HashSet 類似,但它保持插入順序。
- TreeSet:基于紅黑樹實現,按元素的自然順序(或自定義的比較器)對元素進行排序。
Set 接口的常用方法
add(E e):將元素 e 添加到集合中。如果集合已經包含該元素,則返回 false。
remove(Object o):刪除指定的元素。
contains(Object o):檢查集合中是否包含指定的元素。
size():返回集合中的元素數量。
isEmpty():檢查集合是否為空。
clear():清空集合中的所有元素。
iterator():返回集合元素的迭代器,通常用于遍歷集合。
2.1 HashSet
HashSet 是最常用的 Set 實現,基于哈希表實現,不保證元素的順序。它的操作通常是快速的(平均時間復雜度為 O(1)),但不保證插入順序。
2.2 LinkedHashSet
LinkedHashSet 繼承自 HashSet,它保持元素的插入順序(通過鏈表維護插入順序)。與 HashSet 相比,LinkedHashSet 的插入操作稍慢一些,但它保證了元素的順序。
2.3 TreeSet
TreeSet 是一個基于紅黑樹實現的 Set,它會自動按元素的自然順序(或指定的比較器)對元素進行排序。TreeSet 中的元素是有序的,因此它支持基于排序的操作(如查找最小元素、最大元素等)。
2.4 應用場景
去重:Set 常用于去重操作,因為它不允許包含重復元素。可以利用 Set 來確保數據的唯一性。
集合運算:可以使用 Set 來進行集合的并集、交集和差集操作。Set 提供了 retainAll(交集)、removeAll(差集)和 addAll(并集)等方法。
三、Map集合
Map 是一個用于存儲鍵值對(key-value)映射的集合接口。Map 與 Set 和 List 不同,因為它是根據鍵(key)來存儲值(value)的,而不是按照元素的順序或索引順序。Map 接口并不繼承自 Collection 接口,雖然它也可以存儲多個對象,但它的結構是以鍵值對的形式組織的。
主要特點:
- 鍵唯一:Map 中的每個鍵都是唯一的,但多個鍵可以對應相同的值。
- 無序性:Map 本身并不保證鍵值對的存儲順序,但是一些實現類(如 LinkedHashMap)可以保證順序。
- 支持快速查找:通過鍵可以非常高效地找到對應的值。
3.1 HashMap
HashMap 是最常用的 Map 實現類,基于哈希表實現,不保證鍵值對的順序。它的查找和插入操作平均時間復雜度是 O(1),非常高效。
3.2 LinkedHashMap
LinkedHashMap 繼承自 HashMap,除了基于哈希表存儲元素外,還通過鏈表維護鍵值對的插入順序。它保證了元素的插入順序,因此適用于需要順序存儲的場景。
3.3 TreeMap
TreeMap 是一個有序的 Map 實現類,它基于紅黑樹實現,按鍵的自然順序(或通過構造時提供的比較器)對鍵值對進行排序。它支持鍵值對的排序操作。
3.4 Hashtable
Hashtable 是一個古老的線程安全的 Map 實現,它的行為類似于 HashMap,但它是同步的,因此比 HashMap 更慢。由于現代 Java 程序更傾向于使用 ConcurrentHashMap 或其他線程安全的集合類,Hashtable 現在很少使用。
3.5Map 接口常用方法
put(K key, V value):將指定的值與指定的鍵關聯。如果鍵已經存在,則更新值。
get(Object key):返回指定鍵所映射的值。如果鍵不存在,返回 null。
containsKey(Object key):檢查 Map 是否包含指定的鍵。
containsValue(Object value):檢查 Map 是否包含指定的值。
remove(Object key):刪除指定鍵的鍵值對。
size():返回 Map 中鍵值對的數量。
isEmpty():檢查 Map 是否為空。
clear():清空 Map 中的所有鍵值對。
keySet():返回 Map 中所有鍵的集合。
values():返回 Map 中所有值的集合。
entrySet():返回 Map 中所有鍵值對的集合,Map.Entry 是 Map 鍵值對的表示。
通過以上內容便可輕松學習java 的集合類.是不是超級簡單.有任何問題歡迎留言哦!!!
重點!重點!重點!
遇到問題不用怕不如來我的知識庫找找看,也許有意想不到的收獲!!!
易網時代-易庫資源-易庫教程:.NET開發、Java開發、PHP開發、SqlServer技術、MySQL技術-開發資料大全-易網時代-易庫資源-易庫教程 (escdns.com)