亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java Collection集合用法詳解

 更新時(shí)間:2021年10月22日 15:25:27   作者:做哈白日夢(mèng)  
首先Collection是屬于單列集合的頂層接口,表示為一組對(duì)象。其類(lèi)型為引用數(shù)據(jù)類(lèi)型,具體創(chuàng)建對(duì)象,通過(guò)多態(tài)的形式進(jìn)行,本文將給大家詳細(xì)的介紹,需要的朋友可以參考下

1.集合的主要體系及分支

在這里插入圖片描述

1.1Collection集合及實(shí)現(xiàn)類(lèi)

1.概述:首先Collection是屬于單列集合的頂層接口,表示為一組對(duì)象。其類(lèi)型為引用數(shù)據(jù)類(lèi)型,具體創(chuàng)建對(duì)象,通過(guò)多態(tài)的形式進(jìn)行。
2.主要常用方法(E這種是指泛型類(lèi)型,可以為任何引用類(lèi)型):

在這里插入圖片描述

3.Collection集合的遍歷(Iterator迭代器,集合的專(zhuān)用遍歷方式)
概述:

在這里插入圖片描述

2.List集合(List是帶有索引的,所以多注意索引越界等問(wèn)題)

1.概述:有序集合,且允許有重復(fù)的元素,使用者可以精確的控制每個(gè)元素的插入位置,并且可以快速訪(fǎng)問(wèn)。
特點(diǎn):有序(存儲(chǔ)與取出順序一致),且元素可以重復(fù)。

2.常用方法:

在這里插入圖片描述

3.List的列表迭代器(Listlterator)

用法:可以按照任意方向進(jìn)行遍歷,并在迭代期間修改列表,并獲取列表中迭代器的位置,是list集合特有的迭代器。
常用方法:

在這里插入圖片描述

當(dāng)使用倒敘遍歷時(shí),是需要注意先進(jìn)行一遍正向順序;或者直接通過(guò)Collection工具類(lèi)中的reverse()的方法進(jìn)行倒敘,再輸出。

4.并發(fā)修改異常(ConcurrentModificationException)

主要產(chǎn)生原因:通過(guò)內(nèi)部類(lèi)的形式,當(dāng)通過(guò)hasNext()這個(gè)方法時(shí),遍歷集合中加以判斷并添加時(shí)會(huì)發(fā)生并發(fā)異常,是因?yàn)閘ist.add()會(huì)導(dǎo)致實(shí)際的修改集合和預(yù)期的修改集合不對(duì)等而觸發(fā)并發(fā)修改異常。
因?yàn)?當(dāng)你使用list的add方法時(shí)候,只會(huì)添加實(shí)際修改集合的值,而預(yù)期的修改集合值不會(huì)增加,而hasNext()的使用是需要預(yù)期和實(shí)際進(jìn)行判斷的。
如何避免這種異常出現(xiàn)?

1.使用列表迭代器的方法進(jìn)行添加,因?yàn)閍dd不會(huì)導(dǎo)致實(shí)際與預(yù)期的不對(duì)等。

2.通過(guò)for循環(huán)進(jìn)行遍歷。

2.1 List的實(shí)現(xiàn)類(lèi)

1.ArrayList(底層數(shù)據(jù)結(jié)構(gòu)屬于數(shù)組實(shí)現(xiàn),增刪慢,查詢(xún)快);
2.LinkedList(底層數(shù)據(jù)結(jié)構(gòu)屬于雙鏈表,查詢(xún)慢,增刪快);
常用方法:

在這里插入圖片描述

3.Set集合

特點(diǎn):集合是無(wú)序的(存儲(chǔ)與取出順序不一致),且不允許有重復(fù)元素,沒(méi)有索引值,因此不能使用普通for遍歷。

3.1HashSet(Set的實(shí)現(xiàn)類(lèi))

1.哈希值

概述:哈希值是JDK通過(guò)對(duì)象的地址或者字符串或者數(shù)字算出來(lái)的int類(lèi)型的值。
特點(diǎn):同一個(gè)對(duì)象的哈希值是相同的,且在默認(rèn)情況下不同對(duì)象的哈希值是不同的。

2.數(shù)據(jù)結(jié)構(gòu)之哈希表

在這里插入圖片描述

3.怎么HashSet集合的元素唯一性?(重中之重)

在這里插入圖片描述

4.LinkedHashSet集合(HashSet的子類(lèi))

在這里插入圖片描述

LinkedHashSet集合元素是有序的。

3.2TreeSet集合(Set的實(shí)現(xiàn)類(lèi))

特點(diǎn):可以通過(guò)自然排序或者特定的比較器(主要用于Comparable接口來(lái)進(jìn)行)來(lái)進(jìn)行排序;
自然排序Comparable:

在這里插入圖片描述

String類(lèi)實(shí)現(xiàn)類(lèi)自然排序Comparable接口,則可以直接調(diào)用用來(lái)判斷字符串之間的大小,而當(dāng)一個(gè)類(lèi)的對(duì)象之間需要比較時(shí),是需要實(shí)現(xiàn)自然排序Comparable接口,重寫(xiě)其中compareTo的方法。(TreetSet可以通過(guò)匿名內(nèi)部類(lèi)的方法來(lái)進(jìn)行重寫(xiě)自然排序方法)。

4.集合的高頻面試題

4.1Arraylist 與 LinkedList 異同

1. 是否保證線(xiàn)程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保證線(xiàn)程安全;
2. 底層數(shù)據(jù)結(jié)構(gòu): Arraylist 底層使用的是Object數(shù)組;LinkedList 底層使用的是雙向循環(huán)鏈表數(shù)據(jù)結(jié)構(gòu);
3. 插入和刪除是否受元素位置的影響: ① ArrayList 采用數(shù)組存儲(chǔ),所以插入和刪除元素的時(shí)間復(fù)雜度受元素位置的影響。 比如:執(zhí)行add(E e)方法的時(shí)候, ArrayList 會(huì)默認(rèn)在將指定的元素追加到此列表的末尾,這種情況時(shí)間復(fù)雜度就是O(1)。但是如果要在指定位置 i 插入和刪除元素的話(huà)(add(int index, E element))時(shí)間復(fù)雜度就為 O(n-i)。因?yàn)樵谶M(jìn)行上述操作的時(shí)候集合中第 i 和第 i 個(gè)元素之后的(n-i)個(gè)元素都要執(zhí)行向后位/向前移一位的操作。 ② LinkedList 采用鏈表存儲(chǔ),所以插入,刪除元素時(shí)間復(fù)雜度不受元素位置的影響,都是近似 O(1)而數(shù)組為近似 O(n)。
4. 是否支持快速隨機(jī)訪(fǎng)問(wèn): LinkedList 不支持高效的隨機(jī)元素訪(fǎng)問(wèn),而ArrayList 實(shí)現(xiàn)了RandmoAccess 接口,所以有隨機(jī)訪(fǎng)問(wèn)功能??焖匐S機(jī)訪(fǎng)問(wèn)就是通過(guò)元素的序號(hào)快速獲取元素對(duì)象(對(duì)應(yīng)于get(int index)方法)。
5. 內(nèi)存空間占用: ArrayList的空 間浪費(fèi)主要體現(xiàn)在在list列表的結(jié)尾會(huì)預(yù)留一定的容量空間,而LinkedList的空間花費(fèi)則體現(xiàn)在它的每一個(gè)元素都需要消耗比ArrayList更多的空間(因?yàn)橐娣胖苯雍罄^和直接前驅(qū)以及數(shù)據(jù))。

4.2ArrayList 與 Vector 區(qū)別

Vector類(lèi)的所有方法都是同步的??梢杂蓛蓚€(gè)線(xiàn)程安全地訪(fǎng)問(wèn)一個(gè)Vector對(duì)象、但是一個(gè)線(xiàn)程訪(fǎng)問(wèn)Vector的話(huà)代碼要在同步操作上耗費(fèi)大量的時(shí)間。
Arraylist不是同步的,所以在不需要保證線(xiàn)程安全時(shí)時(shí)建議使用Arraylist。

集合框架底層數(shù)據(jù)結(jié)構(gòu)總結(jié)

 1.Collection

1. List

Arraylist: Object數(shù)組
Vector: Object數(shù)組
LinkedList: 雙向循環(huán)鏈表

2. Set

HashSet(無(wú)序,唯一): 基于 HashMap 實(shí)現(xiàn)的,底層采用 HashMap 來(lái)保存元素。
LinkedHashSet: LinkedHashSet 繼承與 HashSet,并且其內(nèi)部是通過(guò) LinkedHashMap 來(lái)實(shí)現(xiàn)的。有點(diǎn)類(lèi)似于我們之前說(shuō)的LinkedHashMap 其內(nèi)部是基于 Hashmap 實(shí)現(xiàn)一樣,不過(guò)還是有一點(diǎn)點(diǎn)區(qū)別的。
TreeSet(有序,唯一): 紅黑樹(shù)(自平衡的排序二叉樹(shù))。

到此這篇關(guān)于Java Collection集合用法詳解的文章就介紹到這了,更多相關(guān)Java Collection集合內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Maven配置倉(cāng)庫(kù)的方法步驟

    Maven配置倉(cāng)庫(kù)的方法步驟

    本文主要介紹了Maven配置倉(cāng)庫(kù)的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • SpringCloud之監(jiān)控?cái)?shù)據(jù)聚合Turbine的實(shí)現(xiàn)

    SpringCloud之監(jiān)控?cái)?shù)據(jù)聚合Turbine的實(shí)現(xiàn)

    這篇文章主要介紹了SpringCloud之監(jiān)控?cái)?shù)據(jù)聚合Turbine的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • java 多線(xiàn)程死鎖詳解及簡(jiǎn)單實(shí)例

    java 多線(xiàn)程死鎖詳解及簡(jiǎn)單實(shí)例

    這篇文章主要介紹了java 多線(xiàn)程死鎖詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Java按行讀取文件文本內(nèi)容的方式匯總

    Java按行讀取文件文本內(nèi)容的方式匯總

    在工作和學(xué)習(xí)中,有時(shí)候會(huì)有一些場(chǎng)景,代碼需要配合讀取文件來(lái)執(zhí)行,比如:讀文件數(shù)據(jù),來(lái)進(jìn)行計(jì)算、組裝SQL、更新操作,本文給大家介紹在Java中按行讀取文件文件內(nèi)容的方式有哪些,感興趣的朋友一起看看吧
    2023-10-10
  • 詳解Java CompletableFuture使用方法以及與FutureTask的區(qū)別

    詳解Java CompletableFuture使用方法以及與FutureTask的區(qū)別

    CompletableFuture實(shí)現(xiàn)了CompletionStage接口和Future接口,前者是對(duì)后者的一個(gè)擴(kuò)展,增加了異步回調(diào)、流式處理、多個(gè)Future組合處理的能力,使Java在處理多任務(wù)的協(xié)同工作時(shí)更加順暢便利
    2021-10-10
  • Java基礎(chǔ)之List內(nèi)元素的排序性能對(duì)比

    Java基礎(chǔ)之List內(nèi)元素的排序性能對(duì)比

    這篇文章主要介紹了Java基礎(chǔ)之List內(nèi)元素的排序性能對(duì)比,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • SpringBoot啟動(dòng)遇到的異常問(wèn)題及解決方案

    SpringBoot啟動(dòng)遇到的異常問(wèn)題及解決方案

    這篇文章主要介紹了SpringBoot啟動(dòng)遇到的異常問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Struts2配置文件中使用通配符的方法(三種形式)

    Struts2配置文件中使用通配符的方法(三種形式)

    Struts2是一個(gè)基于MVC設(shè)計(jì)模式的Web應(yīng)用框架,它本質(zhì)上相當(dāng)于一個(gè)servlet,在MVC設(shè)計(jì)模式中,Struts2作為控制器(Controller)來(lái)建立模型與視圖的數(shù)據(jù)交互。這篇文章主要介紹了Struts2配置文件中使用通配符的相關(guān)知識(shí),需要的朋友可以參考下
    2019-11-11
  • 解決spring data jpa 批量保存更新的問(wèn)題

    解決spring data jpa 批量保存更新的問(wèn)題

    這篇文章主要介紹了解決spring data jpa 批量保存更新的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 詳解MyBatis中column屬性的總結(jié)

    詳解MyBatis中column屬性的總結(jié)

    在MyBatis的映射中有column這么一個(gè)屬性,我一直以為它映射的是數(shù)據(jù)庫(kù)表中的列名,但經(jīng)過(guò)學(xué)習(xí)發(fā)現(xiàn)他似乎映射的是SQL語(yǔ)句中的列名,或者說(shuō)是查詢(xún)結(jié)果所得到的表的列名,這篇文章主要介紹了MyBatis中column屬性的總結(jié),需要的朋友可以參考下
    2022-09-09

最新評(píng)論