欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java集合繼承體系詳解

 更新時(shí)間:2017年11月02日 09:46:41   作者:snow_7  
這篇文章主要為大家詳細(xì)介紹了Java集合繼承體系,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

Java的集合類是一種特別有用的工具,它可以用于存儲(chǔ)數(shù)量不等的多個(gè)對(duì)象,并可以實(shí)現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu),如棧、隊(duì)列等。Java集合還可以用于板寸具有映射關(guān)系的關(guān)聯(lián)數(shù)組。

java集合就像是一個(gè)容器,我們可以把多個(gè)對(duì)象(實(shí)際上是對(duì)象的引用,習(xí)慣上叫對(duì)象,)保存到集合容器中。在JDK1.5以前java集合會(huì)丟失容器中所有對(duì)象的數(shù)據(jù)類型,JDK1.5以后增加了泛型,java集合可以記住容器中對(duì)象的數(shù)據(jù)類型。

Java集合大致可以分為三個(gè)體系:Set List Map.所有的集合類都位于java.util包下面。

Collection接口

Collection接口是List、 Set、和Queue接口的父接口。
Collection所代表的是一種規(guī)則,它所包含的元素都必須遵循一條或者多條規(guī)則。如有些允許重復(fù)而有些則不能重復(fù)、有些必須要按照順序插入而有些則是散列,有些支持排序有些不支持排序。

一、List接口

List接口是Collection接口的直接接口。List代表的是有序的Collection,集合中的每個(gè)元素都有其對(duì)應(yīng)的索引。List中允許有重復(fù)的元素,可以通過(guò)索引來(lái)訪問(wèn)指定位置的集合元素。因?yàn)長(zhǎng)ist集合默認(rèn)按元素的添加順序設(shè)置元素的索引。

(1)ArrayList、Vector、Stack

ArrayList和Vector作為L(zhǎng)ist的兩個(gè)典型實(shí)現(xiàn)類,完全支持List的全部功能。

ArrayList和Vector類的底層都是基于數(shù)組來(lái)儲(chǔ)存集合元素,封裝了一個(gè)動(dòng)態(tài)的Object[]數(shù)組,是一種順序存儲(chǔ)的線性表。

ArrayList和Vector在用法上幾乎完全相同,只是Vector在JDK1.0時(shí)就存在,它的方法名比較冗長(zhǎng)、比ArrayList包含的方法多,源碼比ArrayList包含的源碼也多,ArrayList的序列化實(shí)現(xiàn)比Vector現(xiàn)在Vector基本上被ArrayList所取代了。

主要區(qū)別:ArrayList是線程不安全的,Vector是線程安全的。

如果需要在多線程環(huán)境下使用List集合,而且需要保證線程安全,依然可以避免使用Vector,而是考慮將ArrayList包裝成線程安全的集合類。Java提供的Collections工具類,通過(guò)該工具類synchronizeList方法即可以把ArrayList包裝成線程安全的ArrayList.

Stack

Vector提供了一個(gè)子類,它用于模擬“棧”這種數(shù)據(jù)結(jié)構(gòu),棧通常是先進(jìn)后出的容器。Stack提供了額外的5個(gè)方法,使得Vector可以當(dāng)做棧來(lái)使用。出棧pop,入棧push,訪問(wèn)棧頂元素peek(),判斷棧是否為空empty(),檢測(cè)一個(gè)元素在堆棧中的位置serch().

(2)LinkedList

LinkedList是一個(gè)鏈?zhǔn)酱鎯?chǔ)的線性變,本質(zhì)上是一個(gè)雙向鏈表,它不僅實(shí)現(xiàn)了List接口還實(shí)現(xiàn)了Dueue接口(雙端隊(duì)列,既具有隊(duì)列的特征,也具有棧的特征),所以LinkedList不僅可以做雙向鏈表來(lái)使用,還可以當(dāng)棧和隊(duì)列來(lái)使用。

LinkedList對(duì)元素的插入、刪除元素時(shí)速度非??臁?br />

LinkdedList也是非同步的。若要實(shí)現(xiàn)同步訪問(wèn),可以采取
List list = Collections.synchronizeList(new LinkedList(.....));

(3)異同點(diǎn)對(duì)比

 (1)ArrayList和LinkedList

1)ArrayList是基于動(dòng)態(tài)數(shù)組實(shí)現(xiàn)的,LinkedList是基于雙向鏈表實(shí)現(xiàn)的。
2)ArrayList比較適用于隨機(jī)存取,(可直接通過(guò)索引,LinkedList需要通過(guò)指針遍歷);LinkedList比較適用于增加刪除操作(對(duì)于單條的插入和刪除操作ArrayList比LinkedList速度快,對(duì)于插入好人刪除操作,ArrayList需要移動(dòng)后面的所有元素。)

二、Set接口

Set是一種不允許包含相同元素的Collection。它維持自己的內(nèi)部排序,隨機(jī)訪問(wèn)沒(méi)有任何意義。

(1)HashSet

HashSet是Set接口的典型實(shí)現(xiàn),HashSet按Hash算法來(lái)儲(chǔ)存集合中的元素,具有很好的存取和查找功能。
具有以下特點(diǎn):

1)不保證元素的排列順序,有可能變化;
2)HashSet不是同步的;
3)集合元素可以為空。

(2)TreeSet

 TreeSet是SortedSet接口的唯一實(shí)現(xiàn),TreeSet可以確保元素處于排序狀態(tài),TreeSet并不是根據(jù)元素的插入順序進(jìn)行排序的,而是根據(jù)實(shí)際值進(jìn)行排序。支持兩種排序方式:自然排序和定制排序。

(3)EnumSet

是為枚舉類設(shè)計(jì)的集合類,EnumSet不允許加入null元素。如果試圖插入null,會(huì)拋出空指針異常。
Set的三個(gè)實(shí)現(xiàn)類都是現(xiàn)成不安全的。

三、Map接口

Map保存具有映射關(guān)系的數(shù)據(jù),因此Map集合里保存著兩組值,一組值用來(lái)保存Map里的key,一組用來(lái)保存Map里的value,key和value可以是任何引用類型的數(shù)據(jù)。

Map里的key不允許重復(fù),value可以重復(fù)。key和value之間存在單向的一對(duì)一的關(guān)系,通過(guò)指定的key,總能找到唯一的、確定的value。

(1)HashMap與HashTable

HashMap與HashTable都是Map的典型實(shí)現(xiàn)類,他們之間的關(guān)系類似于ArrayList和Vector:HashTable是一個(gè)古老的Map實(shí)現(xiàn)類,在JDK1.0時(shí)就出現(xiàn)了。

主要區(qū)別:

1)HashTable是一個(gè)線程安全的Map實(shí)現(xiàn),但是HashMap是線程不安全的實(shí)現(xiàn),HashMap的性能要比HashTable高一些,盡量避免使用HashTable,多個(gè)線程訪問(wèn)一個(gè)Map對(duì)象又要保證線程安全時(shí),可以使用Collections中的方法把HashMap變成線程安全的。
2)HashTable不允許使用null作為key和value,如果試圖把null加入HashTable中,將會(huì)引發(fā)空指針異常。

(2)TreeMap

TreeMap是Map的子接口SortedMap的的實(shí)現(xiàn)類,與TreeSet類似的是TreeMap也是基于紅黑樹對(duì)TreeMap中所有的key進(jìn)行排序,從而保證key-value處于有序狀態(tài),TreeMap也有兩種排序方式:

1)自然排序:TreeMap的所有key必須實(shí)現(xiàn)Comparable接口,而且所有key應(yīng)該是同一類的對(duì)象,否則會(huì)拋出ClassCastException.

2)定制排序:創(chuàng)建TreeMap時(shí),傳入一個(gè)Comparator對(duì)象,該對(duì)象負(fù)責(zé)對(duì)TreeMap中所有的key進(jìn)行排序。
由于TreeMap支持內(nèi)部排序,所以通常要比HashMap和HashTable慢。

四、Queue接口

Queue模擬了隊(duì)列這種數(shù)據(jù)結(jié)構(gòu),隊(duì)列通常是“先進(jìn)先出”的數(shù)據(jù)結(jié)構(gòu),通常不允許隨機(jī)訪問(wèn)隊(duì)列中的元素。
Queue常用的實(shí)現(xiàn)類:LinkedList和PriorityQueue

(1)LinkedList

LinkedList它不僅實(shí)現(xiàn)了List接口還實(shí)現(xiàn)了Dueue接口(雙端隊(duì)列,既具有隊(duì)列的特征,也具有棧的特征),Dueue接口是Queue的子接口。

(2)PriorityQueue

PriorityQueue保存隊(duì)列元素的的順序并不是按照加入隊(duì)列的順序,而是按照隊(duì)列元素大小進(jìn)行重新排序。所以當(dāng)調(diào)用peek和poll方法來(lái)取隊(duì)列中的元素的時(shí)候,并不是先取出來(lái)隊(duì)列中最小的元素。從這個(gè)意義上來(lái)看,PriorityQueue已經(jīng)違反了隊(duì)列的基本規(guī)則。PriorityQueue不允許插入null元素。

總結(jié):

線程安全的有Vector Stack HashTable

不允許插入空元素的有HashTable PriorityQueue EnumSet

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot post接口接受json時(shí),轉(zhuǎn)換為對(duì)象時(shí),屬性都為null的解決

    springboot post接口接受json時(shí),轉(zhuǎn)換為對(duì)象時(shí),屬性都為null的解決

    這篇文章主要介紹了springboot post接口接受json時(shí),轉(zhuǎn)換為對(duì)象時(shí),屬性都為null的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 設(shè)計(jì)模式之原型模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    設(shè)計(jì)模式之原型模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了設(shè)計(jì)模式之原型模式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • Maven pom.xml 添加本地jar包依賴以及打包方法

    Maven pom.xml 添加本地jar包依賴以及打包方法

    這篇文章主要介紹了Maven pom.xml 添加本地jar包依賴以及打包方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 關(guān)于自定義過(guò)濾器獲取不到session問(wèn)題

    關(guān)于自定義過(guò)濾器獲取不到session問(wèn)題

    這篇文章主要介紹了關(guān)于自定義過(guò)濾器獲取不到session問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Springboot Thymeleaf字符串對(duì)象實(shí)例解析

    Springboot Thymeleaf字符串對(duì)象實(shí)例解析

    這篇文章主要介紹了Springboot Thymeleaf字符串對(duì)象實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2007-09-09
  • Java獲取登錄用戶的IP地址示例代碼

    Java獲取登錄用戶的IP地址示例代碼

    在開發(fā)中我們經(jīng)常需要獲取用戶IP地址,通過(guò)地址來(lái)實(shí)現(xiàn)一些功能,下面這篇文章主要給大家介紹了關(guān)于Java獲取登錄用戶的IP地址的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • java實(shí)現(xiàn)ReadWriteLock讀寫鎖的示例

    java實(shí)現(xiàn)ReadWriteLock讀寫鎖的示例

    ReadWriteLock是Java并發(fā)包中的接口,定義了讀鎖和寫鎖,讀鎖允許多線程同時(shí)訪問(wèn)共享資源,而寫鎖則要求獨(dú)占,這種機(jī)制適用于讀多寫少的場(chǎng)景,可以提高并發(fā)效率同時(shí)保證數(shù)據(jù)一致性,本文就來(lái)詳細(xì)的介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下
    2024-09-09
  • Java創(chuàng)建隨機(jī)數(shù)的四種方式總結(jié)

    Java創(chuàng)建隨機(jī)數(shù)的四種方式總結(jié)

    這篇文章主要介紹了java的四種隨機(jī)數(shù)生成方式的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下
    2022-07-07
  • 使用Spring Data JPA的坑點(diǎn)記錄總結(jié)

    使用Spring Data JPA的坑點(diǎn)記錄總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于使用Spring Data JPA的一些坑點(diǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • 詳解java基礎(chǔ)--提示對(duì)話框的使用

    詳解java基礎(chǔ)--提示對(duì)話框的使用

    這篇文章主要介紹了java基礎(chǔ)--提示對(duì)話框的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03

最新評(píng)論