Java 集合框架 2
1.入門
Collection介面是集合框架層次結構的根介面。
Java沒有提供直接實現Collection介面,但是像提供其子介面List,Set和Queue的實現
https://www.cainiaojc.com/java/java-collections.html
--各類集合的介面
只求瞭解其結構-瞭解結構實現
2.List
List介面是一個有序的集合,它允許我們按順序儲存和訪問元素。它擴充套件了集合介面。
1.list方法
List介面包括Collection介面的所有方法。 這是因為Collection是List的超級介面。
Collection介面中還提供了一些常用的List介面方法:
- add() - 將元素新增到列表
- addAll() - 將一個列表的所有元素新增到另一個
- get() - 有助於從列表中隨機訪問元素
- iterator() - 返回迭代器物件,該物件可用於順序訪問列表的元素
- set() - 更改列表的元素
- remove() - 從列表中刪除一個元素
- removeAll() - 從列表中刪除所有元素
- clear() - 從列表中刪除所有元素(比removeAll()效率更高)
- size() - 返回列表的長度
- toArray() - 將列表轉換為陣列
- contains() - 如果列表包含指定的元素,則返回true
2.ArrayList
https://blog.csdn.net/Supper_Shenchao/article/details/131505504
ArrayList 其內部是以動態陣列的形式來儲存資料的
->還是定長-
這裡的動態陣列不是意味著去改變原有內部生成的陣列的長度、而是保留原有陣列的引用、將其指向新生成的陣列物件、這樣會造成陣列的長度可變的假象;
---浪費空間
3.Vector
Vector類同步每個單獨的操作。這意味著每當我們想對向量執行某些操作時,Vector類就會自動對該操作應用鎖。
4.Stack 堆疊
結構圖
在堆疊中,元素以後進先出的方式儲存和訪問。也就是說,元素被新增到堆疊的頂部並從堆疊的頂部移除。
方法push pop peek search empty
5.LinkedLis 連結串列結構 -雙端資料結結構
-
Prev - 將前一個元素的地址儲存在列表中。 第一個元素為null。
-
Next - 在列表中儲存下一個元素的地址。 最後一個元素為null。
-
Data - 儲存實際資料。
結構圖
-
Dog - 第一個元素將null作為前一個地址,並將Cat的地址作為下一個地址
-
Cat - 第二個元素將Dog的地址作為前一個地址,將Cow的地址作為下一個地址
-
Cow - 最後一個元素將Cat的地址作為前一個地址,並將null作為下一個元素
雙向連結串列-遇到再說
https://www.cainiaojc.com/java/java-linkedlist.html
3.Quenue
1.Quenue瞭解
於Queue是一個介面,因此我們無法提供它的直接實現。
為了使用Queue的功能,我們需要使用實現它的類
結構圖
在佇列中,以先進先出的方式儲存和訪問元素。也就是說,從後面新增元素,從前面刪除元素。
// 使用 LinkedList 建立
Queue<String> animal1 = new LinkedList<>();
// 使用 ArrayDeque 建立
Queue<String> animal2 = new ArrayDeque<>();
// 使用 PriorityQueue建立
Queue<String> animal 3 = new PriorityQueue<>();
2.Queue的方法
Queue介面包括Collection介面的所有方法。 這是因為Collection是Queue的超級介面。
Queue介面的一些常用方法是:
- add() - 將指定的元素插入佇列。如果任務成功,則add()返回true,否則將引發異常。
- offer() - 將指定的元素插入佇列。如果任務成功,則offer()返回true,否則返回false。
- element() - 返回佇列的開頭。如果佇列為空,則引發異常。
- peek() - 返回佇列的開頭。 如果佇列為空,則返回null。
- remove() - 返回並刪除佇列的頭部。如果佇列為空,則引發異常。
- poll() - 返回並刪除佇列的開頭。 如果佇列為空,則返回null。
3.PriorityQueue -優先順序佇列
與普通佇列不同,優先佇列元素是按排序順序檢索的。
假設我們想以升序檢索元素。在這種情況下,優先佇列的頭是最小的元素。檢索到該元素後,下一個最小的元素將成為佇列的頭。
需要注意的是,優先佇列的元素可能沒有排序。但是,元素總是按排序順序檢索的。
add-每次插入元素-如果最小就排到頭部嘛、
public class test {
public static void main(String[] args) {
//建立優先佇列
PriorityQueue<Integer> numbers = new PriorityQueue<>();
//使用add()方法
numbers.add(4);
numbers.add(2);
System.out.println("PriorityQueue: " + numbers);
//使用offer()方法
numbers.offer(5);
System.out.println("更新後的PriorityQueue: " + numbers);
numbers.offer(3);
System.out.println("更新後的PriorityQueue: " + numbers);
}
}
PriorityQueue: [2, 4]
更新後的PriorityQueue: [2, 4, 5]
更新後的PriorityQueue: [2, 3, 5, 4]
//謎一般的排序--唯一能保證的是頭部永遠是最小的
4.Deque 雙端佇列 -
由於Deque繼承了Queue介面,因此它繼承了Queue介面的所有方法。
除了Queue介面中可用的方法之外,Deque介面還包括以下方法:
- addFirst() - 在雙端佇列的開頭新增指定的元素。如果雙端佇列已滿,則引發異常。
- addLast() - 在雙端佇列的末尾新增指定的元素。如果雙端佇列已滿,則引發異常。
- offerFirst() - 在雙端佇列的開頭新增指定的元素。如果雙端佇列已滿,則返回false。
- offerLast() - 在雙端佇列的末尾新增指定的元素。如果雙端佇列已滿,則返回false。
- getFirst() - 返回雙端佇列的第一個元素。如果雙端佇列為空,則引發異常。
- getLast() - 返回雙端佇列的最後一個元素。如果雙端佇列為空,則引發異常。
- peekFirst() - 返回雙端佇列的第一個元素。如果雙端佇列為空,則返回null。
- peekLast() - 返回雙端佇列的最後一個元素。如果雙端佇列為空,則返回null。
- removeFirst() - 返回並刪除雙端佇列的第一個元素。如果雙端佇列為空,則引發異常。
- removeLast() - 返回並刪除雙端佇列的最後一個元素。如果雙端佇列為空,則引發異常。
- pollFirst() - 返回並刪除雙端佇列的第一個元素。如果雙端佇列為空,則返回null。
- pollLast() - 返回並刪除雙端佇列的最後一個元素。如果雙端佇列為空,則返回null。
https://www.cainiaojc.com/java/java-deque.html
省
Java Collections框架的Stack類提供了堆疊的實現。
但是,建議Deque用作堆疊而不是Stack類。這是因為Stack的方法是同步的。
以下是Deque介面提供的用於實現堆疊的方法:
- push() - 在雙端佇列的開頭新增元素
- pop() - 從雙端佇列的開頭刪除元素
- peek() - 從雙端佇列的開頭返回一個元素
5.ArrayDeque 陣列雙端佇列
ArrayDeque該類使用陣列來實現佇列和雙端佇列資料結構。
與連結串列一樣-都是雙端-不同的是涉及資料搬移 浪費資源
4.Map
Map元素儲存在鍵/值對中。 鍵是與各個值相關聯的唯一值。
Map集合不能包含重複的鍵。並且,每個鍵都與一個值相關聯。
Map介面維護3個不同的集合:
- 鍵集
- 值集
- 鍵/值關聯(Map集合)的集合。
//使用HashMap類建立Map
Map<Key, Value> numbers = new HashMap<>();
Map介面包括Collection介面的所有方法。這是因為Collection是Map的超級介面。
除了Collection介面中可用的方法之外,Map介面還包括以下方法:
- put(K,V) - 將鍵K和值V的關聯插入到map中。如果鍵已經存在,則新值將替換舊值。
- putAll() - 將指定Map集合中的所有條目插入此Map集合中。
- putIfAbsent(K,V) - 如果鍵K尚未與value關聯,則插入關聯V。
- get(K) - 返回與指定鍵K關聯的值。如果找不到該鍵,則返回null。
- getOrDefault(K,defaultValue) - 返回與指定鍵K關聯的值。如果找不到鍵,則返回defaultValue。
- containsKey(K) - 檢查指定的鍵K是否在map中。
- containsValue(V) - 檢查指定的值V是否存在於map中。
- replace(K,V) - 將鍵K的值替換為新的指定值V。
- replace(K,oldValue,newValue) - 僅當鍵K與值oldValue相關聯時,才用新值newValue替換鍵K的值。
- remove(K) - 從鍵K表示的Map中刪除條目。
- remove(K,V) - 從Map集合中刪除鍵K與值V相關聯的條目。。
- keySet() -返回Map集合中存在的所有鍵的集合。
- values() -返回一組包含在Map集合中的所有值。
- entrySet() -返回map中存在的所有鍵/值對映的集合。
1.Map型別
HashMap java集合框架的HashMap類提供Map介面的雜湊表實現。
-將資料雜湊化--我們傳遞搜尋的值->雜湊化進行比對
雜湊表的優勢在於能夠透過雜湊函式快速定位資料元素,而不需要像順序儲存結構或平衡樹那樣進行多次比較。
LinkedHashMap
LinkedHashMap繼承了HashMap類,以將其條目儲存在雜湊表中。它在內部在所有條目之間維護一個雙鏈列表,以對條目進行排序。
ConcurrentHashMap
Java集合框架的ConcurrentHashMap類提供了執行緒安全的對映。 也就是說,多個執行緒可以一次訪問該對映,而不會影響對映中條目的一致性。
併發的雜湊圖
5.Set
Set集合不能包含重複的元素。
1.set方法
Set介面包含Collection介面的所有方法。 這是因為Collection是Set的超級介面。
Set介面中還提供了Collection介面的一些常用方法:
- add() - 將指定的元素新增到集合中
- addAll() - 將指定集合的所有元素新增到集合中
- iterator() -返回一個迭代器,該迭代器可用於順序訪問集合中的元素
- remove() - 從集合中移除指定的元素
- removeAll() - 從存在於另一個指定集合中的集合中刪除所有元素
- keepAll() -保留集合中所有還存在於另一個指定集合中的所有元素
- clear() - 從集合中刪除所有元素
- size() - 返回集合的長度(元素數)
- toArray() - 返回包含集合中所有元素的陣列
- contains() - 如果集合包含指定的元素,則返回true
- containsAll() - 如果集合包含指定集合的所有元素,則返回true
- hashCode() -返回雜湊碼值(集合中元素的地址)
https://blog.csdn.net/m0_59619191/article/details/120362488
總結
list-結構 stack結構 Linkedl結構
quenue結構 Deque結構 ArrayDeque結構
陣列儲存 和連結串列儲存區別 --開闢 和搜尋
Map -鍵值
Set區別 -不許重複值
後續關於一些資料儲存--就的百度看看誰搜尋 插值快了-具體資料結構-後續再深入