溫馨提示×

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

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

Java常用的集合有哪些

發(fā)布時(shí)間:2021-11-30 14:51:51 來源:億速云 閱讀:169 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“Java常用的集合有哪些”,在日常操作中,相信很多人在Java常用的集合有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Java常用的集合有哪些”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

先來看一張集合概況圖,這里從上到下列舉了幾個(gè)最經(jīng)常用的集合

Java常用的集合有哪些

1、集合接口

java.util.Collection 是一個(gè)集合接口。它提供了對(duì)集合對(duì)象進(jìn)行基本操作的通用接口方法。Collection接口在Java 類庫(kù)中有很多具體的實(shí)現(xiàn)。Collection接口的意義是為各種具體的集合提供了最大化的統(tǒng)一操作方式。聲明了適用于JAVA集合(只包括Set和List)的通用方法。Set 和List 都繼承了Conllection,Map沒有.

2、集合類型

JAVA集合主要分為三種類型:Set(集),List(列表),Map(映射)

Set集合:集合元素是不能重復(fù)的,元素是沒有順序的,所以它不能基于位置訪問元素。

List集合: 集合元素是可以重復(fù)的,元素是有順序的,所以它可以基于位置訪問元素。

Map:它包含鍵值對(duì)。Map的鍵是不能重復(fù)的,可以保證元素的插入順序,也可以排序。

3、集合介紹

Set(集):

HashSet

HashSet是基于HashMap實(shí)現(xiàn)的,它不允許出現(xiàn)重復(fù)元素,不保證和政集合中元素的順序,允許包含值為null的元素,但最多只能有一個(gè)null元素。

TreeSet

TreeSet可以實(shí)現(xiàn)排序等功能的集合,它在講對(duì)象元素添加到集合中時(shí)會(huì)自動(dòng)按照某種比較規(guī)則將其插入到有序的對(duì)象序列中,并保證該集合元素按照“升序”排列。

LinkedHashSet

具有HashSet的查詢速度,且內(nèi)部使用鏈表維護(hù)元素的順序(插入的次序),于是在使用迭代器遍歷Set時(shí),結(jié)果會(huì)按元素插入的次序顯示。

List(列表):

ArrayList

內(nèi)部結(jié)構(gòu)基于數(shù)組實(shí)現(xiàn),可以對(duì)元素進(jìn)行隨機(jī)的訪問,向ArrayList中插入與刪除元素的速度慢。

Java常用的集合有哪些

LinkedList

LinkedList 是一個(gè)繼承于AbstractSequentialList的雙向鏈表,可以被當(dāng)作堆棧、隊(duì)列或雙端隊(duì)列進(jìn)行操作。LinkedList同時(shí)還實(shí)現(xiàn)了List、Deque(雙端隊(duì)列)、Cloneable(能克?。?、java.io.Serializable(支持序列化,能通過序列化去傳輸)等接口,LinkedList是非同步的。

每個(gè)節(jié)點(diǎn)除含有元素外,還包含向前,向后的指針。 
新建一個(gè)LinkedList,生成一個(gè)頭節(jié)點(diǎn)(header,就是一個(gè)頭指針),它的元素為null。 

Java常用的集合有哪些

它自包含,next和previous指針都指向自己。 執(zhí)行add(Object obj)方法后,會(huì)生成一個(gè)新節(jié)點(diǎn) 
 

Java常用的集合有哪些


Header節(jié)點(diǎn)的next指向鏈表的第一個(gè)節(jié)點(diǎn),previous指向鏈表的最后一個(gè)節(jié)點(diǎn),在這里都是first,再增加一個(gè)對(duì)象,它的形狀像下面這樣。 

Java常用的集合有哪些

Vector

Vector 是矢量隊(duì)列,它是JDK1.0版本添加的類。繼承于AbstractList,實(shí)現(xiàn)了List(支持相關(guān)的添加、刪除、修改、遍歷等), RandomAccess(隨機(jī)訪問功能), Cloneable(能被克?。┻@些接口。

Vector實(shí)際上是通過一個(gè)數(shù)組去保存數(shù)據(jù)的。當(dāng)我們構(gòu)造Vecotr時(shí);若使用默認(rèn)構(gòu)造函數(shù),則Vector的默認(rèn)容量大小是10。

當(dāng)Vector容量不足以容納全部元素時(shí),Vector的容量會(huì)增加。若容量增加系數(shù) >0,則將容量的值增加“容量增加系數(shù)”;否則,將容量大小增加一倍。Vector的克隆函數(shù),即是將全部元素克隆到一個(gè)數(shù)組中。和ArrayList不同,Vector中的操作是線程安全的。

Stack

Stack是棧,它的特性是:先進(jìn)后出(FILO, First In Last Out)。

Stack繼承于Vector(矢量隊(duì)列)的,由于Vector是通過數(shù)組實(shí)現(xiàn)的,這就意味著,Stack也是通過數(shù)組實(shí)現(xiàn)的,而非鏈表。

Map(映射):

  Map基于散列表的實(shí)現(xiàn),Map 是一種把鍵對(duì)象和值對(duì)象映射的集合,它的每一個(gè)元素都包含一對(duì)鍵對(duì)象和值對(duì)象。

HashMap

HashMap底層就是一個(gè)數(shù)組結(jié)構(gòu)(叫做Entry Table),數(shù)組中的每一項(xiàng)又是一個(gè)鏈表(叫做Bucket,用于解決hash沖突而設(shè)計(jì)的)。當(dāng)新建一個(gè)HashMap的時(shí)候,就會(huì)初始化一個(gè)數(shù)組。插入和查詢“鍵值對(duì)”的開銷是固定的,可以通過構(gòu)造器設(shè)置容量capacity和負(fù)載因子load factor,以調(diào)整容器的性能。初始化結(jié)構(gòu)如下:

Java常用的集合有哪些

每個(gè)bucket包含一個(gè)Entry(map自定義的一種結(jié)構(gòu),包含一個(gè)往后的指針)的鏈表。 
在put(key, value)后,它的結(jié)構(gòu)如下:


Java常用的集合有哪些

LinkedHashMap

類似于HashMap,但是迭代遍歷它時(shí),取得“鍵值對(duì)”的順序是其插入次序,或者是最近最少使用(LRU)的次序,只比HashMap慢一點(diǎn)。而在迭代訪問時(shí)發(fā)而更快,因?yàn)樗褂面湵砭S護(hù)內(nèi)部次序。

Java常用的集合有哪些

TreeMap

基于紅黑樹數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn),查看“鍵”或“鍵值對(duì)”時(shí),它們會(huì)被排序(次序由Comparabel或Comparator決定)。TreeMap的特點(diǎn)在于,你得到的結(jié)果是經(jīng)過排序的。TreeMap是唯一的帶有subMap()方法的Map,它可以返回一個(gè)子樹。

WeakHashMap

弱鍵(weak key)Map,Map中使用的對(duì)象也被允許釋放: 這是為解決特殊問題設(shè)計(jì)的。如果沒有map之外的引用指向某個(gè)“鍵”,則此“鍵”可以被垃圾收集器回收。

IdentifyHashMap

使用==代替equals()對(duì)“鍵”作比較的hash map,專為解決特殊問題而設(shè)計(jì)。

Hashtable

Hashtable與HashMap類似,Hashtable繼承自Dictionary類,實(shí)現(xiàn)了Map接口,不同的是它不允許記錄的鍵或者值為空;和HashMap相比,Hashtable是線程同步的,即任一時(shí)刻只有一個(gè)線程能寫Hashtable,因此也導(dǎo)致了 Hashtable在寫入時(shí)會(huì)比較慢。而且Hashtable可以通過Enumeration去遍歷。

到此,關(guān)于“Java常用的集合有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(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