Java集合
- 一、Java集合框架
- 集合框架前序:
- 集合框架概述(一)
- 集合框架概述(二)(集合的使用場景)
- 集合框架概述(三)(Collection介面繼承樹)
- 集合框架概述(三)(Map介面繼承樹)
- 二、Collection介面方法
- ①Collection介面
- ②Collection介面方法
- 三、Iterator迭代器介面
- ①使用 Iterator 介面遍歷集合元素
- ②Iterator介面的方法
- ③ Iterator迭代器介面
- ④使用 foreach 回圈遍歷集合元素
- 四、Collection子介面一:List
- ①List介面概述
- ②List介面方法
- ③List實作類之一:ArrayList
- ④List實作類之二:LinkedList
- ⑤List實作類之二:LinkedList
- ⑥List 實作類之三:Vector
- ⑦面試題
- 五、Collection子介面二:Set
- ①Set 介面概述
- ②Set實作類之一:HashSet
- ③重寫 hashCode() 方法的基本原則
- ④Eclipse/IDEA工具里hashCode()的重寫
- ⑤Set實作類之二:LinkedHashSet
- ⑥Set實作類之三:TreeSet
- ⑦排 序—自然排序
- ⑧排 序—定制排序
- ⑨練習:在List內去除重復數字值,要求盡量簡單
- 六、Map介面
- ①Map介面繼承樹
- ②Map介面概述
- ③Map介面:常用方法
- ④Map實作類之一:HashMap
- ⑤HashMap的存盤結構
- ⑥HashMap原始碼中的重要常量
- ⑦HashMap的存盤結構:JDK 1.8之前
- ⑧HashMap的存盤結構:JDK 1.8
- ⑨面試題
- ⑩Map實作類之二:LinkedHashMap
- ⑩①Map實作類之三:TreeMap
- ⑩②Map實作類之四:Hashtable
- ⑩③Map實作類之五:Properties
- 七、Collections工具類
- ①Collection工具類常用方法
- ②Collections常用方法:同步控制
- ③補充:Enumeration
一、Java集合框架
集合框架前序:
??早在 Java 2 中之前,Java 就提供了特設類,比如:Dictionary, Vector, Stack, 和 Properties 這些類用來存盤和操作物件組,雖然這些類都非常有用,但是它們缺少一個核心的,統一的主題,由于這個原因,使用 Vector 類的方式和使用 Properties 類的方式有著很大不同,
集合框架被設計成要滿足以下幾個目標,
-
該框架必須是高性能的,基本集合(動態陣列,鏈表,樹,哈希表)的實作也必須是高效的,
-
該框架允許不同型別的集合,以類似的方式作業,具有高度的互操作性,
-
對一個集合的擴展和適應必須是簡單的,
??為此,整個集合框架就圍繞一組標準介面而設計,你可以直接使用這些介面的標準實作,諸如: LinkedList, HashSet, 和 TreeSet 等,除此之外你也可以通過這些介面實作自己的集合,

集合框架概述(一)
- 一方面, 面向物件語言對事物的體現都是以物件的形式,為了方便對多個物件的操作,就要對物件進行存盤,另一方面,使用Array存盤物件方面具有一些弊端,而Java 集合就像一種容器,可以動態地把多個物件的參考放入容器中,
–>陣列在記憶體存盤方面的特點:
???①陣列初始化以后,長度就確定了,
???②陣列宣告的型別,就決定了進行元素初始化時的型別,
–>陣列在存盤資料方面的弊端:
???①陣列初始化以后,長度就不可變了,不便于擴展,
???②陣列中提供的屬性和方法少,不便于進行添加、洗掉、插入等操
???作,且效率不高,同時無法直接獲取存盤元素的個數,
???③陣列存盤的資料是有序的、可以重復的,–>存盤資料的特點單一 - Java 集合類可以用于存盤數量不等的多個物件,還可用于保存具有映射關系的關聯陣列,
集合框架概述(二)(集合的使用場景)


集合框架概述(三)(Collection介面繼承樹)

集合框架概述(三)(Map介面繼承樹)

二、Collection介面方法
①Collection介面
- Collection 介面是 List、Set 和 Queue 介面的父介面,該介面里定義的方法
既可用于操作 Set 集合,也可用于操作 List 和 Queue 集合, - JDK不提供此介面的任何直接實作,而是提供更具體的子介面(如:Set和List)
實作, - 在 Java5 之前,Java 集合會丟失容器中所有物件的資料型別,把所有物件都
當成 Object 型別處理;從 JDK 5.0 增加了泛型以后,Java 集合可以記住容
器中物件的資料型別,
②Collection介面方法


三、Iterator迭代器介面
①使用 Iterator 介面遍歷集合元素
- Iterator物件稱為迭代器(設計模式的一種),主要用于遍歷 Collection 集合中的元素,
- GOF給迭代器模式的定義為:提供一種方法訪問一個容器(container)物件中各個元素,而又不需暴露該物件的內部細節,迭代器模式,就是為容器而生,類似于“公交車上的售票員”、“火車上的乘務員”、“空姐”,
- Collection介面繼承了java.lang.Iterable介面,該介面有一個iterator()方法,那么所有實作了Collection介面的集合類都有一個iterator()方法,用以回傳一個實作了Iterator介面的物件,
- Iterator 僅用于遍歷集合,Iterator 本身并不提供承裝物件的能力,如果需要創建Iterator 物件,則必須有一個被迭代的集合,
- 集合物件每次呼叫iterator()方法都得到一個全新的迭代器物件,默認游標都在集合的第一個元素之前,
②Iterator介面的方法

③ Iterator迭代器介面



④使用 foreach 回圈遍歷集合元素

四、Collection子介面一:List
①List介面概述
- 鑒于Java中陣列用來存盤資料的局限性,我們通常使用List替代陣列
- List集合類中元素有序、且可重復,集合中的每個元素都有其對應的順序索引,
- List容器中的元素都對應一個整數型的序號記載其在容器中的位置,可以根據
序號存取容器中的元素, - JDK API中List介面的實作類常用的有:ArrayList、LinkedList和Vector,
②List介面方法

③List實作類之一:ArrayList

④List實作類之二:LinkedList

⑤List實作類之二:LinkedList

⑥List 實作類之三:Vector

⑦面試題

五、Collection子介面二:Set
①Set 介面概述
- Set介面是Collection的子介面,set介面沒有提供額外的方法
- Set 集合不允許包含相同的元素,如果試把兩個相同的元素加入同一個
Set 集合中,則添加操作失敗, - Set 判斷兩個物件是否相同不是使用 == 運算子,而是根據 equals() 方法
②Set實作類之一:HashSet



③重寫 hashCode() 方法的基本原則
- 在程式運行時,同一個物件多次呼叫 hashCode() 方法應該回傳相同的值,
- 當兩個物件的 equals() 方法比較回傳 true 時,這兩個物件的 hashCode()
方法的回傳值也應相等, - 物件中用作 equals() 方法比較的 Field,都應該用來計算 hashCode 值,
以自定義的Customer類為例,何時需要重寫equals()?
- 當一個類有自己特有的“邏輯相等”概念,當改寫equals()的時候,總是
要改寫hashCode(),根據一個類的equals方法(改寫后),兩個截然不
同的實體有可能在邏輯上是相等的,但是,根據Object.hashCode()方法,
它們僅僅是兩個物件, - 因此,違反了“相等的物件必須具有相等的散列碼”,
- 結論:復寫equals方法的時候一般都需要同時復寫hashCode方法,通
常參與計算hashCode的物件的屬性也應該參與到equals()中進行計算,
④Eclipse/IDEA工具里hashCode()的重寫

⑤Set實作類之二:LinkedHashSet
- LinkedHashSet 是 HashSet 的子類
- LinkedHashSet 根據元素的 hashCode 值來決定元素的存盤位置,但它同時使用雙向鏈表維護元素的次序,這使得元素看起來是以插入順序保存的,
- LinkedHashSet插入性能略低于 HashSet,但在迭代訪問 Set 里的全部元素時有很好的性能,
- LinkedHashSet 不允許集合元素重復,

⑥Set實作類之三:TreeSet


⑦排 序—自然排序


⑧排 序—定制排序

⑨練習:在List內去除重復數字值,要求盡量簡單

六、Map介面
①Map介面繼承樹

②Map介面概述


③Map介面:常用方法


④Map實作類之一:HashMap

⑤HashMap的存盤結構


⑥HashMap原始碼中的重要常量

⑦HashMap的存盤結構:JDK 1.8之前


⑧HashMap的存盤結構:JDK 1.8



⑨面試題
??談談你對HashMap中put/get方法的認識?如果了解再談談HashMap的擴容機制?默認大小是多少?什么是負載因子(或填充比)?什么是吞吐臨界值(或閾值、threshold)?
??面試題:負載因子值的大小,對HashMap有什么影響

⑩Map實作類之二:LinkedHashMap
- LinkedHashMap 是 HashMap 的子類
- 在HashMap存盤結構的基礎上,使用了一對雙向鏈表來記錄添加
元素的順序 - 與LinkedHashSet類似,LinkedHashMap 可以維護 Map 的迭代
順序:迭代順序與 Key-Value 對的插入順序一致

⑩①Map實作類之三:TreeMap

⑩②Map實作類之四:Hashtable

⑩③Map實作類之五:Properties

七、Collections工具類
①Collection工具類常用方法


②Collections常用方法:同步控制

③補充:Enumeration

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/353380.html
標籤:java
