Java集合框架

Sea發表於2023-02-03

Java集合框架

在這裡插入圖片描述


每博一文案

《殺死一隻知更鳥》中有這樣一段話:“你永遠不可能真正地瞭解一個人,除非你穿上他的鞋子走來走去,站在他的角度思考問題。
可真當你走過他的路時,你連路過都覺得難過。”
世上沒有真正的感同身受,也永遠不會有一模一樣的境遇。
很多時候,你以為看到了全貌,但其實只有冰山一角。永遠不要憑著一點蛛絲馬跡,就隨意評判別人的人生。
在你看不到的角落裡,多的是你不知道的事。
不知別人的苦,就別勸人大度;沒有經歷過他人的難,就不要肆意嘲諷。

@

1. 集合簡介

早在 Java 2 中之前,Java 就提供了特設類。比如:Dictionary, Vector, Stack, 和 Properties 這些類用來儲存和操作物件組。

雖然這些類都非常有用,但是它們缺少一個核心的,統一的主題。由於這個原因,使用 Vector 類的方式和使用 Properties 類的方式有著很大不同。

集合框架被設計成要滿足以下幾個目標。

  • 該框架必須是高效能的。基本集合(動態陣列,連結串列,樹,雜湊表)的實現也必須是高效的。
  • 該框架允許不同型別的集合,以類似的方式工作,具有高度的互操作性。
  • 對一個集合的擴充套件和適應必須是簡單的。

為此,整個集合框架就圍繞一組標準介面而設計。你可以直接使用這些介面的標準實現,諸如: LinkedList, HashSet, 和 TreeSet 等,除此之外你也可以透過這些介面實現自己的集合。

集合也稱為容器,僅僅是一個物件,多個元素組成一個單元。集合用於儲存、檢索、操作和聚合資料。 通常,他們標識形成自然組的資料項,例如撲克牌(牌集合),郵件資料夾(字母集合)。

1.1 集合和陣列的區別:

陣列:

  • 陣列初始化以後,長度就是確定了的,無法修改的,不便於擴充套件。
  • 陣列宣告的型別,就決定了進行元素儲存的型別了,僅僅只能儲存一種資料型別。
  • 陣列中提供的屬性和方法少,不便於進行新增,刪除,插入等操作,且效率不高,同時無法直接獲取儲存元素的實際個數。
  • 陣列儲存的資料是有序的,可以重複的,儲存資料的特點單一

集合:

  • 集合的長度是可變的,不足時,會自動擴容,便於擴充套件。
  • 集合可以儲存不同的型別(其實集合一般儲存的也是同一種型別),實際上集合儲存的是引用物件的地址值 。所以集合只能儲存一種型別引用資料型別 ,不可以儲存基本資料型別(可以儲存包裝類)。而陣列既可以儲存基本資料型別,也可以儲存引用資料型別。
  • 集合提供大量的屬性和方法,便於新增,刪除,插入,只能獲取到集合中儲存元素的實際個數 size()
  • Java 集合類可以用於儲存數量不等的多個物件,還可用於儲存具有對映關係的關聯陣列。

2. 集合的使用場景

在這裡插入圖片描述

3. 集合框架概述

一個集合框架是用於表示和操作的集合統一架構。所有集合框架包含以下內容:

  • 介面

    這些是表示集合的抽象資料型別。介面允許獨立於它們的表示的細節來操縱集合。在面嚮物件語言中,介面通常形成層次結構。

  • 實現

    這些是集合介面的具體實現。實質上,它們是可重用的資料結構。

  • 演算法

    這些方法對實現集合介面的物件執行有用的計算,例如搜尋和排序。演算法被認為是多型的: 也就是說,相同的方法可以用於適當的收集介面的許多不同的實現。實質上,演算法是可重用的功能。

Java集合可分為 Collection 和 Map 兩種體系。

Java集合的框架圖:

在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述

4. Java 集合框架的好處

Java 集合框架提供了以下好處:

  • 減少程式設計工作量:

    透過提供有用的資料結構和演算法,集合框架可以讓您專注於程式的重要部分,而不是使其工作所需的低階“管道”。 透過促進不相關的 API 之間的互操作性,Java 集合框架免除了編寫介面卡物件或轉換程式碼來連線 API。

  • 提高程式速度和質量:

    這個集合框架提供了有用的資料結構和演算法的高效能,高質量的實現。每個介面的各種實現是可以互換的, 所以程式可以透過切換集合實現來輕鬆地進行調整。由於您已經擺脫了編寫自己的資料結構的苦差事, 您將有更多時間致力於提高程式的質量和效能。

  • 允許不相關的 API 之間的互操作性:

    集合介面是 APIs 來回傳遞集合的本地語言。如果我的網路管理 API 提供了一個節點名稱的集合, 並且如果您的 GUI 工具包期望一個列標題的集合,我們的 API 將無縫地互操作,即使它們是獨立編寫的。

  • 減少了學習和使用新的 API 的努力:

    許多 API 自然會將輸入的集合作為輸出提供。過去,每個這樣的 API 都有一個小的子 API 來操縱它的集合。 這些專用集合的子 API 之間幾乎沒有一致性,所以你必須從頭學習每一個,使用它們很容易犯錯誤。 隨著標準集合介面的出現,問題就消失了。

  • 減少設計新 API 的工作量:

    這是以前優勢的另一面。設計師和實施者不必在每次建立依賴於集合的 API 時重新發明輪子; 相反,他們可以使用標準的集合介面。

  • 促進軟體重用:

    符合標準集合介面的新資料結構本質上是可重用的。對於在實現這些介面的物件上執行的新演算法也是如此。

5. 實現

實現是用於儲存集合的資料物件,本課介紹以下幾種實現:

  • 通用實現 :是最常用的實現,專為日常使用而設計。他們在標題為“通用目的實現”的表中進行了總結。
  • 特殊實現:專為在特殊情況下使用而設計,並顯示非標準效能特性,使用限制或行為
  • 併發實現 :支援高併發,通常以犧牲單執行緒效能為代價。這些實現是 java.util.concurrent 軟體包中的一部分
  • 封裝器實現 : 與其他型別的實現(通常是通用實現)結合使用,以提供增加或現在的功能
  • 方便實現 : 也就是小型實現,通常透過靜態工廠方法提供,為特殊集合(例如單例集)的通用實現提供方便,高效的替代
  • 抽象實現 : 便於構建定製實現的骨架實現。稍後在“自定義集合的實現”中進行介紹。一個高階的話題,這不是特別困難,但相對少的人需要做。

通用實現被總結在下表

介面 雜湊表 可變陣列 平衡二叉樹 連結串列 雜湊表+連結串列
Set HashSet - TreeSet - LinkedHashSet
List - ArrayList - LinkedList -
Deque - ArrayDeque - LinkedList -
Map HashMap - TreeMap - LinkedHashMap
Queue - - - - -

正如你可以從表中看到,Java 集合框架提供了幾種通用的實現 Set, List 以及 Map。

6. 最後:

限於自身水平,其中存在的錯誤,希望大家給予指教,韓信點兵——多多益善,謝謝大家,後會有期,江湖再見!!!
在這裡插入圖片描述

相關文章