Java容器

weixin_34320159發表於2017-03-27

容器:裝其他東西的


804968-e0b931b696c71789.png
容器相關內容

Java API 所提供的一系列類的例項,用於在程式中存放物件。


804968-1c0df304b543b29a.png
容器API

1136:一個圖  一個類 三個知識點和6個介面(TreeSet TreeMap)

java.util  utili 工具包

介面定義,定義標準。

Collection集合介面  Set集合介面 無順序 不能重複  List集合 有順序 能重複(equals返回為true)。


804968-59ac75271d93541d.png
介面

重複指的是元素之間相互equals。


804968-da11a2641a1db7be.png
Collections定義的方法

contains,兩個元素equals,而不是 ==  這是引用相等。


804968-8b099f87b6302170.png
Collection舉例

ArrayList 不指定型別時  可以新增多個類。

父類引用訪問子類物件,無法訪問子類物件私有的方法。(控制反轉)


804968-b6576bcfdbe294b8.png
collection 例子1

remove時會和集合內元素 進行 equals (重寫equals,不是指向同一引用)比較 ,若為true 則移除。重寫equals 就需要重寫hashcode


804968-cb09b39bea78c1a8.png

比較物件主要用的是equals方法,有的時候需要HashCode方法,物件在Map介面作為索引,作為Key,使用HashCode方法進行比較,效率更高。重寫Equals則重寫hashCode。相等的物件應具有相同的hashCode方法。hashCode非常適合做索引。

Iterator: 迭代器

804968-ed6669dc00c345df.png
Iterator介面

所有實現了Collection介面的容器類都有一個iterator方法用以返回一個實現了Iterator介面的物件。Iterator物件稱作迭代器(不可反覆遍歷),用以方便的實現對容器內元素的遍歷操作。統一實現不同集合類的遍歷操作。


804968-726d9f07ba4c676e.png
ArrayList&LinkedList

List是對外提供的一個介面,容器。ArrayList是使用陣列作為底層儲存(方便遍歷)。LinkedList以連結串列作為底層儲存元素(方便新增)。

多型存在三個必要的條件:

要有繼承。要有重寫。要有父類引用指向子類物件。


804968-d60def984eb93ce1.png
Iterator方法舉例


804968-846106890574fe4e.png
Iterator方法舉例

Iterator物件的remove方法是在迭代過程中刪除元素的唯一的安全方法。

Iterator迴圈遍歷過程中,執行了鎖定。不允許其他物件進行操作。


804968-3989b40f6ae6b087.png
增強for迴圈


804968-75e8a1736b60a8b6.png
增強for迴圈

遍歷陣列的時候 不能方便的訪問下標值;

訪問集合時,與使用Iterator相比 不能方便的刪除集合內容,在內部也是呼叫Iterator方法。


804968-365d7652fc7a00dc.png
Set介面

實現Set介面的容器類中的元素必須是沒有順序的,而且不可以重複。


804968-94c8aea4fb422bc2.png
Set舉例

重寫equals方法,重寫hashCode方法。重複的元素不能填寫。


804968-32f894474c62717d.png
Set舉例

retainAll  集合之間求交集。無序。


804968-c552f87de5f32ee2.png
List

list非常像陣列。可以隨便更改容器大小,但是陣列不行(需要多次copy)。有順序,可以重複。List容器中的元素對應一個整數型的序號記載其在容器中的位置,可以根據序號存取容器中的元素。

set方法返回的是舊元素。  indexOf 重寫equals  重寫hashCode


804968-7af39a26003681b3.png
List方法舉例


804968-0a47f419c79e7f78.png
Collections

Java.util.Collections提供了一些靜態方法實現了基於List容器的一些常用演算法。

void sort(List) 對List容器內的元素排序


804968-f113d3aeddf1e20e.png
list演算法

Collections.shuffle()  Collections.sort()  Collections.reverse() Collections.binarySearch() 靜態方法。

Comparable:

通過介面只能看見物件的某一點。


804968-3ab7e152b0b6ba3d.png
Comparable


804968-ac9ad7544e598b6f.png


804968-97ae336e98c3f20e.png
讀寫效率

Array讀快改慢  Linked改快讀慢 Hash兩者之間


804968-16b4d88009ba0fe0.png
Map

鍵值不能重複(equals  hashCode),HashMap TreeMap

put(key,newvalue)  返回的是 oldValue


804968-4edf8702e29691f4.png
Map方法舉例

autoBoxing_UnBoxing  自動打包


804968-482379c636e0ac8d.png
自動打包-解包

自動將基礎型別轉換為物件 -- 打包 ,將物件轉換為基礎型別 -- 解包


804968-5b3c2a436490fd1e.png
自動打包-解包


804968-f486ac6dd47c06f7.png
例子1


804968-f4d4ec6b66112fce.png
例子2

泛型: Generic

之前型別不明確,裝入集合的型別都被當作Object對待,從前失去自己的實際型別。

從集合中取出時往往需要轉型,效率低,容易產生錯誤。

在定義集合的時候 同時定義集合中物件的型別,增強程式的可讀性和穩定性。問題越提前越好,儘量不要再執行時出問題。

804968-713e2794f6c4d68b.png


804968-e0edb2a173c637e7.png
泛型例項1


804968-6105f3eaae1acb00.png
泛型例項2


804968-b55e198e43e1d749.png
泛型 -自動打包解包

使用到集合儘量使用泛型。

總結


804968-5abc35274c25aff5.png

泛型的可讀性和穩定性

相關文章