最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java集合繼承體系詳解

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

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

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

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

Collection接口

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

一、List接口

List接口是Collection接口的直接接口。List代表的是有序的Collection,集合中的每個元素都有其對應的索引。List中允許有重復的元素,可以通過索引來訪問指定位置的集合元素。因為List集合默認按元素的添加順序設置元素的索引。

(1)ArrayList、Vector、Stack

ArrayList和Vector作為List的兩個典型實現(xiàn)類,完全支持List的全部功能。

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

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

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

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

Stack

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

(2)LinkedList

LinkedList是一個鏈式存儲的線性變,本質(zhì)上是一個雙向鏈表,它不僅實現(xiàn)了List接口還實現(xiàn)了Dueue接口(雙端隊列,既具有隊列的特征,也具有棧的特征),所以LinkedList不僅可以做雙向鏈表來使用,還可以當棧和隊列來使用。

LinkedList對元素的插入、刪除元素時速度非常快。

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

(3)異同點對比

 (1)ArrayList和LinkedList

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

二、Set接口

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

(1)HashSet

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

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

(2)TreeSet

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

(3)EnumSet

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

三、Map接口

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

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

(1)HashMap與HashTable

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

主要區(qū)別:

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

(2)TreeMap

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

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

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

四、Queue接口

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

(1)LinkedList

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

(2)PriorityQueue

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

總結(jié):

線程安全的有Vector Stack HashTable

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • android中GridView的用法示例

    android中GridView的用法示例

    這篇文章主要介紹了android中GridView的用法,對于Android初學者很有參考學習價值,需要的朋友可以參考下
    2014-08-08
  • SpringMVC攔截器失效問題及解決方法

    SpringMVC攔截器失效問題及解決方法

    這篇文章主要介紹了SpringMVC?攔截器和異常處理器,以及SpringMVC攔截器失效分析解決方案,文中補充介紹了SpringMVC?攔截器和異常處理器的相關(guān)知識,需要的朋友可以參考下
    2024-01-01
  • JPA多條件復雜SQL動態(tài)分頁查詢功能

    JPA多條件復雜SQL動態(tài)分頁查詢功能

    這篇文章主要介紹了JPA多條件復雜SQL動態(tài)分頁查詢功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • springboot配置過濾器和多個攔截器、執(zhí)行順序(案例詳解)

    springboot配置過濾器和多個攔截器、執(zhí)行順序(案例詳解)

    這篇文章主要介紹了springboot配置過濾器和多個攔截器、執(zhí)行順序,在文章開頭給大家介紹了過濾器配置的兩種方法,創(chuàng)建兩個攔截器,重寫方法結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • SpringBoot 如何使用RestTemplate發(fā)送Post請求

    SpringBoot 如何使用RestTemplate發(fā)送Post請求

    這篇文章主要介紹了SpringBoot 如何使用RestTemplate發(fā)送Post請求的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 詳解MyBatis特性之動態(tài)SQL

    詳解MyBatis特性之動態(tài)SQL

    動態(tài) SQL 是 MyBatis 的強大特性之一,這篇文章我們將結(jié)合動態(tài)SQL完成更加復雜的 SQL 操作,文章通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • Springboot項目異常處理及返回結(jié)果統(tǒng)一

    Springboot項目異常處理及返回結(jié)果統(tǒng)一

    這篇文章主要介紹了Springboot項目異常處理及返回結(jié)果統(tǒng)一,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • 微信小程序 navigator 跳轉(zhuǎn)url傳遞參數(shù)

    微信小程序 navigator 跳轉(zhuǎn)url傳遞參數(shù)

    這篇文章主要介紹了 微信小程序 navigator 跳轉(zhuǎn)url傳遞參數(shù)的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Java實現(xiàn)排列組合算法的兩種方案

    Java實現(xiàn)排列組合算法的兩種方案

    Java排列組合算法是一種用于生成所有可能的排列和組合的算法,在Java中,可以使用遞歸或迭代的方式實現(xiàn)排列組合算法,本文給大家介紹了Java實現(xiàn)排列組合算法的兩種方案,需要的朋友可以參考下
    2024-04-04
  • 如何使用Idea中的 Deployment 實現(xiàn)打包自動部署

    如何使用Idea中的 Deployment 實現(xiàn)打包自動部署

    這篇文章主要介紹了使用Idea中的 Deployment 實現(xiàn)打包自動部署,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08

最新評論

庆安县| 白山市| 黄骅市| 德庆县| 房山区| 长子县| 湖北省| 富蕴县| 灵璧县| 青岛市| 武乡县| 富阳市| 醴陵市| 铜梁县| 永福县| 海林市| 彰武县| 巴马| 策勒县| 固安县| 称多县| 博客| 邹城市| 思南县| 健康| 乌兰察布市| 曲靖市| 开化县| 定结县| 平阳县| 达州市| 青铜峡市| 峡江县| 屏南县| 镇巴县| 嘉义县| 岳阳市| 桐乡市| 荃湾区| 班戈县| 武安市|