Java集合框架
每博一文案
《殺死一隻知更鳥》中有這樣一段話:“你永遠不可能真正地瞭解一個人,除非你穿上他的鞋子走來走去,站在他的角度思考問題。
可真當你走過他的路時,你連路過都覺得難過。”
世上沒有真正的感同身受,也永遠不會有一模一樣的境遇。
很多時候,你以為看到了全貌,但其實只有冰山一角。永遠不要憑著一點蛛絲馬跡,就隨意評判別人的人生。
在你看不到的角落裡,多的是你不知道的事。
不知別人的苦,就別勸人大度;沒有經歷過他人的難,就不要肆意嘲諷。
@
1. 集合簡介
早在 Java 2 中之前,Java 就提供了特設類。比如:Dictionary, Vector, Stack, 和 Properties
這些類用來儲存和操作物件組。
雖然這些類都非常有用,但是它們缺少一個核心的,統一的主題。由於這個原因,使用 Vector
類的方式和使用 Properties
類的方式有著很大不同。
集合框架被設計成要滿足以下幾個目標。
- 該框架必須是高效能的。基本集合(動態陣列,連結串列,樹,雜湊表)的實現也必須是高效的。
- 該框架允許不同型別的集合,以類似的方式工作,具有高度的互操作性。
- 對一個集合的擴充套件和適應必須是簡單的。
為此,整個集合框架就圍繞一組標準介面而設計。你可以直接使用這些介面的標準實現,諸如: LinkedList, HashSet, 和 TreeSet 等,除此之外你也可以透過這些介面實現自己的集合。
集合也稱為容器,僅僅是一個物件,多個元素組成一個單元。集合用於儲存、檢索、操作和聚合資料。 通常,他們標識形成自然組的資料項,例如撲克牌(牌集合),郵件資料夾(字母集合)。
1.1 集合和陣列的區別:
陣列:
- 陣列初始化以後,長度就是確定了的,無法修改的,不便於擴充套件。
- 陣列宣告的型別,就決定了進行元素儲存的型別了,僅僅只能儲存一種資料型別。
- 陣列中提供的屬性和方法少,不便於進行新增,刪除,插入等操作,且效率不高,同時無法直接獲取儲存元素的實際個數。
- 陣列儲存的資料是有序的,可以重複的,儲存資料的特點單一 。
集合:
- 集合的長度是可變的,不足時,會自動擴容,便於擴充套件。
- 集合可以儲存不同的型別(其實集合一般儲存的也是同一種型別),實際上集合儲存的是引用物件的地址值 。所以集合只能儲存一種型別引用資料型別 ,不可以儲存基本資料型別(可以儲存包裝類)。而陣列既可以儲存基本資料型別,也可以儲存引用資料型別。
- 集合提供大量的屬性和方法,便於新增,刪除,插入,只能獲取到集合中儲存元素的實際個數 size()
- Java 集合類可以用於儲存數量不等的多個物件,還可用於儲存具有對映關係的關聯陣列。
2. 集合的使用場景
3. 集合框架概述
一個集合框架是用於表示和操作的集合統一架構。所有集合框架包含以下內容:
-
介面
這些是表示集合的抽象資料型別。介面允許獨立於它們的表示的細節來操縱集合。在面嚮物件語言中,介面通常形成層次結構。
-
實現
這些是集合介面的具體實現。實質上,它們是可重用的資料結構。
-
演算法
這些方法對實現集合介面的物件執行有用的計算,例如搜尋和排序。演算法被認為是多型的: 也就是說,相同的方法可以用於適當的收集介面的許多不同的實現。實質上,演算法是可重用的功能。
Java集合可分為 Collection 和 Map 兩種體系。
- Collection 介面:單例資料,定義了存取一組物件的方法的集合。
- List : 元素有序,可重複的集合。具體的詳細內容可以移步至:??? Java Collection 介面下的 “ List 集合” 與 “ Set 集合 ”_ChinaRainbowSea的部落格-CSDN部落格
- Set :元素無序,不可重複的集合。
- Map 介面:雙列資料,儲存具有對映關係 ”key-value對“ 的集合。具體的詳細內容可以移步至:??? Java集合 Map 集合 與 操作集合的工具類: Collections 的詳細說明_ChinaRainbowSea的部落格-CSDN部落格
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. 最後:
限於自身水平,其中存在的錯誤,希望大家給予指教,韓信點兵——多多益善,謝謝大家,後會有期,江湖再見!!!