java-容器 02

逆向狗發表於2024-03-22

Java 集合框架 2

1.入門

Java Collections Framework中的介面

Collection介面是集合框架層次結構的根介面。

Java沒有提供直接實現Collection介面,但是像提供其子介面List,Set和Queue的實現

https://www.cainiaojc.com/java/java-collections.html

--各類集合的介面

只求瞭解其結構-瞭解結構實現

2.List

List介面是一個有序的集合,它允許我們按順序儲存和訪問元素。它擴充套件了集合介面。

在Java中實現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 堆疊

Java Stack類擴充套件了Vector類

結構圖

在堆疊中,元素以後進先出的方式儲存和訪問。也就是說,元素被新增到堆疊的頂部並從堆疊的頂部移除。

堆疊資料結構的工作

方法push pop peek search empty

5.LinkedLis 連結串列結構 -雙端資料結結構連結串列實現的介面
  • Prev - 將前一個元素的地址儲存在列表中。 第一個元素為null。

  • Next - 在列表中儲存下一個元素的地址。 最後一個元素為null。

  • Data - 儲存實際資料。

    結構圖

    Java中LinkedList的工作

  • Dog - 第一個元素將null作為前一個地址,並將Cat的地址作為下一個地址

  • Cat - 第二個元素將Dog的地址作為前一個地址,將Cow的地址作為下一個地址

  • Cow - 最後一個元素將Cat的地址作為前一個地址,並將null作為下一個元素

雙向連結串列-遇到再說

https://www.cainiaojc.com/java/java-linkedlist.html

3.Quenue

1.Quenue瞭解

ArrayDeque,LinkedList和PriorityQueue在Java中實現了Queue介面。

於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集合不能包含重複的鍵。並且,每個鍵都與一個值相關聯。

Java中的map介面的工作

Map介面維護3個不同的集合:

  • 鍵集
  • 值集
  • 鍵/值關聯(Map集合)的集合。

HashMap,TreeMap,EnumMap,LinkedHashMap和WeakHashMap類實現Java 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

介面SortedSet和NavigableSet擴充套件了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區別 -不許重複值

後續關於一些資料儲存--就的百度看看誰搜尋 插值快了-具體資料結構-後續再深入

相關文章