溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Java常見(jiàn)知識(shí)點(diǎn)匯總(⑦)——集合框架

發(fā)布時(shí)間:2020-08-08 18:37:44 來(lái)源:ITPUB博客 閱讀:146 作者:無(wú)敵天驕 欄目:軟件技術(shù)

Java常見(jiàn)知識(shí)點(diǎn)匯總(⑦)——集合框架

一. Collection和Collections的區(qū)別

Collection是集合繼承結(jié)構(gòu)中的頂層接口(interface),其是Iterable的子類(lèi)。

Collections 是提供了對(duì)集合進(jìn)行操作的強(qiáng)大方法的工具類(lèi) ,它包含有各種有關(guān)集合操作的靜態(tài)多態(tài)方法。此類(lèi)不能實(shí)例化(其構(gòu)造函數(shù)是private的,該類(lèi)中的方法都是static的可以直接調(diào)用)

二. Collection

ArrayList:線程不同步。默認(rèn)初始容量為10,當(dāng)數(shù)組大小不足時(shí)增長(zhǎng)率為當(dāng)前長(zhǎng)度的50%。

Vector:線程同步。默認(rèn)初始容量為10,當(dāng)數(shù)組大小不足時(shí)增長(zhǎng)率為當(dāng)前長(zhǎng)度的100%。它的同步是通過(guò)Iterator方法加synchronized實(shí)現(xiàn)的。

LinkedList:線程不同步。雙端隊(duì)列形式。

Stack:線程同步。繼承自Vector,添加了幾個(gè)方法來(lái)完成棧的功能。

Set:Set是一種不包含重復(fù)元素的Collection,Set最多只有一個(gè)null元素。

HashSet:線程不同步,內(nèi)部使用HashMap進(jìn)行數(shù)據(jù)存儲(chǔ),提供的方法基本都是調(diào)用HashMap的方法,所以?xún)烧弑举|(zhì)是一樣的。集合元素可以為NULL。

NavigableSet:添加了搜索功能,可以對(duì)給定元素進(jìn)行搜索:小于、小于等于、大于、大于等于,放回一個(gè)符合條件的最接近給定元素的 key。

TreeSet:線程不同步,內(nèi)部使用NavigableMap操作。默認(rèn)元素“自然順序”排列,可以通過(guò)Comparator改變排序。

EnumSet:線程不同步。內(nèi)部使用Enum數(shù)組實(shí)現(xiàn),速度比HashSet快。只能存儲(chǔ)在構(gòu)造函數(shù)傳入的枚舉類(lèi)的枚舉值。

三. Map

HashMap:線程不同步。根據(jù)key的hashcode進(jìn)行存儲(chǔ),內(nèi)部使用靜態(tài)內(nèi)部類(lèi)Node的數(shù)組進(jìn)行存儲(chǔ),默認(rèn)初始大小為16,每次擴(kuò)大一倍。當(dāng)發(fā)生Hash沖突時(shí),采用拉鏈法(鏈表)??梢越邮転閚ull的鍵值(key)和值(value)。JDK 1.8中:當(dāng)單個(gè)桶中元素個(gè)數(shù)大于等于8時(shí),鏈表實(shí)現(xiàn)改為紅黑樹(shù)實(shí)現(xiàn);當(dāng)元素個(gè)數(shù)小于6時(shí),變回鏈表實(shí)現(xiàn)。由此來(lái)防止hashCode攻擊。

LinkedHashMap:保存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時(shí),先得到的記錄肯定是先插入的. 也可以在構(gòu)造時(shí)用帶參數(shù),按照應(yīng)用次數(shù)排序。在遍歷的時(shí)候會(huì)比HashMap慢,不過(guò)有種情況例外,當(dāng)HashMap容量很大,實(shí)際數(shù)據(jù)較少時(shí),遍歷起來(lái)可能會(huì)比LinkedHashMap慢,因?yàn)長(zhǎng)inkedHashMap的遍歷速度只和實(shí)際數(shù)據(jù)有關(guān),和容量無(wú)關(guān),而HashMap的遍歷速度和他的容量有關(guān)。

TreeMap:線程不同步,基于 紅黑樹(shù) (Red-Black tree)的NavigableMap 實(shí)現(xiàn),能夠把它保存的記錄根據(jù)鍵排序,默認(rèn)是按鍵值的升序排序,也可以指定排序的比較器,當(dāng)用Iterator 遍歷TreeMap時(shí),得到的記錄是排過(guò)序的。

HashTable:線程安全,HashMap的迭代器(Iterator)是fail-fast迭代器。HashTable不能存儲(chǔ)NULL的key和value。

四. 工具類(lèi)

Collections、Arrays:集合類(lèi)的一個(gè)工具類(lèi)/幫助類(lèi),其中提供了一系列靜態(tài)方法,用于對(duì)集合中元素進(jìn)行排序、搜索以及線程安全等各種操作。

Comparable,Comparator:一般是用于對(duì)象的比較來(lái)實(shí)現(xiàn)排序,兩者略有區(qū)別。

  • 類(lèi)設(shè)計(jì)者沒(méi)有考慮到比較問(wèn)題而沒(méi)有實(shí)現(xiàn)Comparable接口。這是我們就可以通過(guò)使用Comparator,這種情況下,我們是不需要改變對(duì)象的。
  • 一個(gè)集合中,我們可能需要有多重的排序標(biāo)準(zhǔn),這時(shí)候如果使用Comparable就有些捉襟見(jiàn)肘了,可以自己繼承Comparator提供多種標(biāo)準(zhǔn)的比較器進(jìn)行排序。
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI