Java集合,你真的瞭解嗎?

集合的本質

集合的主要作用是存儲對象的容器。

大家耳熟能詳的容器(集合)類,有 ArrayList,HashMap,HashSet.等等 相信大家去面試時,面試官經常會問 ArrayList,LinkedList 怎麼選擇? HashMap 底層的數據存儲組織能詳細聊聊嗎?等問題
那麼爲什麼會有這種多的容器呢?又或者說爲什麼面試官在乎這些問題呢? 從我的理解來看,因爲不同的集合容器類,他的特點不一樣,或者說不同的集合類可以基於不同的場景進行選擇。集合(容器)的底層是由於數據組織的方式不一樣。或者這麼理解:出現不同的集合是因爲他們的數據結構不一樣,從而出現了不同的特性。

數據結構

數組:
特點:
1.連續的空間要求
2.可以通過下標的成員訪問,下標訪問的性能高(有索引)
3.增刪操作帶來更大的性能消耗(保證數據越界的問題,需動態擴容)
典型的 JAVA 集合類 ArrayList
在這裏插入圖片描述
鏈表(雙向爲例)
特點:
1.靈活的空間要求,存儲空間不要求連續
2.不支持下標的訪問.支持順序的遍歷搜索(那麼有個問題:LinkedList 有下標訪問get(index)方法,怎麼回 事?後續LinkedList 詳細講解)
3.針對增刪操作找到對應的節點改變鏈表的頭尾指向即可,無需移動元素存儲位 置
典型的 Java 集合類 LinkedList
在這裏插入圖片描述
樹(二叉查找樹)
特點:
1.靈活的空間要求,存儲空間不要求連續,可按指定順序進行排列
2.不支持下標的訪問,支持近似二分的查找訪問方式
3.增刪操作有一個節點查找的過程,操作之後還存在樹的平衡保證問題
4.增刪改變節點的引用關係,無需移動元素的存儲位置
典型的 Java 集合類 TreeMap
在這裏插入圖片描述

集合的派系整體認識

Java 中集合類分爲 2 大主要派系:Collection 和 Map

Collection派系

在這裏插入圖片描述

Collection 是一個接口,是高度抽象出來的集合,它包含了集合的基本操作和 屬性。

Collection 實現了 Iterable 接口來完成集合中元素的迭代遍歷能力 Iterator iterator();
Collection 包含了 List 和 Set 兩大分支。
1.List 是一個有序的隊列,每一個元素都有它的索引。List 的實現類有 LinkedList, ArrayList, Vector。
2.Set 是一個不允許有重複元素的集合。Set 的實現類有 HastSet 和 TreeSet。(注意:HashSet 依賴於 HashMap。它實際上是通過 HashMap 實現的;TreeSet 依賴於 TreeMap,它實際上是通過 TreeMap 實現的。)
Iterator:

Iterator 是一個接口,它是集合的迭代器。集合可以通過 Iterator 去遍歷集合 中的元素。Iterator 提供的 API
接口,包括:是否存在下一個元素、獲取下一 個元素、刪除當前元素
abstract boolean hasNext()
abstract E next()
abstract void remove()

Map 派系

在這裏插入圖片描述

Map 是一個映射接口即 key-value 鍵值對

1.Map 提供接口分別用於返回鍵集、值集或鍵-值映射關係集。
entrySet()用於返回 鍵-值集的Set 集合
keySet()用於返回鍵的Set 集合
values()用戶返回值集的Collection 集合
注意:因爲 Map 中不能包含重複的鍵;每個鍵最多隻能映射到一個值。所以,鍵-值集、鍵集都是 Set,值在 Map 中是可以允許重複的所有值集是Collection。
2.Map 提供了“鍵-值對”、“根據鍵獲取值”、“刪除鍵”、“獲取容量大小”等基 本方法。
V get(Object key);
V remove(Object key);
int size();、

Map 派系與 Collection 派系有什麼關係?

大家用HashMap 應該都有針對 HashMap 的key 和value進行遍歷的操作吧. 具體使用如:
hashMapObj.keySet() ;獲取所有鍵的集合
hashMapObj.values() ;獲取所有值的集合
所以整理來講 Map 派系需要依賴 Collection 派系.
而 在 我 們 Collection 的 Set 分 支 中 ,HashSet 和 TreeSet 又 是 依 賴 於 HashMap 和 TreeMap 進行實現(具體分析在後續 Set 集合類中) 所以說兩大集合派系是相輔相成的,最終的圖示,大家可以看下圖:
在這裏插入圖片描述

發佈了21 篇原創文章 · 獲贊 34 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章