Java容器

容器:裝其他東西的


容器相關(guān)內(nèi)容

Java API 所提供的一系列類(lèi)的實(shí)例,用于在程序中存放對(duì)象。


容器API

1136:一個(gè)圖 ?一個(gè)類(lèi) 三個(gè)知識(shí)點(diǎn)和6個(gè)接口(TreeSet TreeMap)

java.util ?utili 工具包

接口定義,定義標(biāo)準(zhǔn)。

Collection集合接口 ?Set集合接口 無(wú)順序 不能重復(fù) ?List集合 有順序 能重復(fù)(equals返回為true)。


接口

重復(fù)指的是元素之間相互equals。


Collections定義的方法

contains,兩個(gè)元素equals,而不是 == ?這是引用相等。


Collection舉例

ArrayList 不指定類(lèi)型時(shí) ?可以添加多個(gè)類(lèi)。

父類(lèi)引用訪問(wèn)子類(lèi)對(duì)象,無(wú)法訪問(wèn)子類(lèi)對(duì)象私有的方法。(控制反轉(zhuǎn))


collection 例子1

remove時(shí)會(huì)和集合內(nèi)元素 進(jìn)行 equals (重寫(xiě)equals,不是指向同一引用)比較 ,若為true 則移除。重寫(xiě)equals 就需要重寫(xiě)hashcode


比較對(duì)象主要用的是equals方法,有的時(shí)候需要HashCode方法,對(duì)象在Map接口作為索引,作為Key,使用HashCode方法進(jìn)行比較,效率更高。重寫(xiě)Equals則重寫(xiě)hashCode。相等的對(duì)象應(yīng)具有相同的hashCode方法。hashCode非常適合做索引。

Iterator: 迭代器

Iterator接口

所有實(shí)現(xiàn)了Collection接口的容器類(lèi)都有一個(gè)iterator方法用以返回一個(gè)實(shí)現(xiàn)了Iterator接口的對(duì)象。Iterator對(duì)象稱(chēng)作迭代器(不可反復(fù)遍歷),用以方便的實(shí)現(xiàn)對(duì)容器內(nèi)元素的遍歷操作。統(tǒng)一實(shí)現(xiàn)不同集合類(lèi)的遍歷操作。


ArrayList&LinkedList

List是對(duì)外提供的一個(gè)接口,容器。ArrayList是使用數(shù)組作為底層存儲(chǔ)(方便遍歷)。LinkedList以鏈表作為底層存儲(chǔ)元素(方便添加)。

多態(tài)存在三個(gè)必要的條件:

要有繼承。要有重寫(xiě)。要有父類(lèi)引用指向子類(lèi)對(duì)象。


Iterator方法舉例


Iterator方法舉例

Iterator對(duì)象的remove方法是在迭代過(guò)程中刪除元素的唯一的安全方法。

Iterator循環(huán)遍歷過(guò)程中,執(zhí)行了鎖定。不允許其他對(duì)象進(jìn)行操作。


增強(qiáng)for循環(huán)


增強(qiáng)for循環(huán)

遍歷數(shù)組的時(shí)候 不能方便的訪問(wèn)下標(biāo)值;

訪問(wèn)集合時(shí),與使用Iterator相比 不能方便的刪除集合內(nèi)容,在內(nèi)部也是調(diào)用Iterator方法。


Set接口

實(shí)現(xiàn)Set接口的容器類(lèi)中的元素必須是沒(méi)有順序的,而且不可以重復(fù)。


Set舉例

重寫(xiě)equals方法,重寫(xiě)hashCode方法。重復(fù)的元素不能填寫(xiě)。


Set舉例

retainAll ?集合之間求交集。無(wú)序。


List

list非常像數(shù)組??梢噪S便更改容器大小,但是數(shù)組不行(需要多次copy)。有順序,可以重復(fù)。List容器中的元素對(duì)應(yīng)一個(gè)整數(shù)型的序號(hào)記載其在容器中的位置,可以根據(jù)序號(hào)存取容器中的元素。

set方法返回的是舊元素。 ?indexOf 重寫(xiě)equals ?重寫(xiě)hashCode


List方法舉例


Collections

Java.util.Collections提供了一些靜態(tài)方法實(shí)現(xiàn)了基于List容器的一些常用算法。

void sort(List) 對(duì)List容器內(nèi)的元素排序


list算法

Collections.shuffle()? Collections.sort()? Collections.reverse() Collections.binarySearch() 靜態(tài)方法。

Comparable:

通過(guò)接口只能看見(jiàn)對(duì)象的某一點(diǎn)。


Comparable



讀寫(xiě)效率

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


Map

鍵值不能重復(fù)(equals ?hashCode),HashMap TreeMap

put(key,newvalue) ?返回的是 oldValue


Map方法舉例

autoBoxing_UnBoxing ?自動(dòng)打包


自動(dòng)打包-解包

自動(dòng)將基礎(chǔ)類(lèi)型轉(zhuǎn)換為對(duì)象 -- 打包 ,將對(duì)象轉(zhuǎn)換為基礎(chǔ)類(lèi)型 -- 解包


自動(dòng)打包-解包


例子1


例子2

泛型: Generic

之前類(lèi)型不明確,裝入集合的類(lèi)型都被當(dāng)作Object對(duì)待,從前失去自己的實(shí)際類(lèi)型。

從集合中取出時(shí)往往需要轉(zhuǎn)型,效率低,容易產(chǎn)生錯(cuò)誤。

在定義集合的時(shí)候 同時(shí)定義集合中對(duì)象的類(lèi)型,增強(qiáng)程序的可讀性和穩(wěn)定性。問(wèn)題越提前越好,盡量不要再運(yùn)行時(shí)出問(wèn)題。


泛型實(shí)例1


泛型實(shí)例2


泛型 -自動(dòng)打包解包

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

總結(jié)


泛型的可讀性和穩(wěn)定性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容