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

Java Collection集合用法詳解

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

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

在這里插入圖片描述

1.1Collection集合及實現(xiàn)類

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

2.常用方法:

在這里插入圖片描述

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

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

在這里插入圖片描述

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

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

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

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

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

2.1 List的實現(xiàn)類

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

在這里插入圖片描述

3.Set集合

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

3.1HashSet(Set的實現(xiàn)類)

1.哈希值

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

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

在這里插入圖片描述

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

在這里插入圖片描述

4.LinkedHashSet集合(HashSet的子類)

在這里插入圖片描述

LinkedHashSet集合元素是有序的。

3.2TreeSet集合(Set的實現(xiàn)類)

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

在這里插入圖片描述

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

4.集合的高頻面試題

4.1Arraylist 與 LinkedList 異同

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

4.2ArrayList 與 Vector 區(qū)別

Vector類的所有方法都是同步的。可以由兩個線程安全地訪問一個Vector對象、但是一個線程訪問Vector的話代碼要在同步操作上耗費大量的時間。
Arraylist不是同步的,所以在不需要保證線程安全時時建議使用Arraylist。

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

 1.Collection

1. List

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

2. Set

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

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

相關(guān)文章

  • dm.jdbc.driver.DMException網(wǎng)絡(luò)通信異常的解決過程

    dm.jdbc.driver.DMException網(wǎng)絡(luò)通信異常的解決過程

    最近一個項目里面出現(xiàn)了一個比較詭異的問題,給大家分享下,這篇文章主要給大家介紹了關(guān)于dm.jdbc.driver.DMException網(wǎng)絡(luò)通信異常的解決過程,需要的朋友可以參考下
    2023-02-02
  • 快速排序和分治排序介紹

    快速排序和分治排序介紹

    這篇文章主要介紹了快速排序和分治排序,需要的朋友可以參考下
    2015-04-04
  • springboot框架各個層次基礎(chǔ)詳解

    springboot框架各個層次基礎(chǔ)詳解

    這篇文章主要介紹了springboot框架各個層次基礎(chǔ),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java ArrayList集合詳解(Java動態(tài)數(shù)組)

    Java ArrayList集合詳解(Java動態(tài)數(shù)組)

    這篇文章主要介紹了Java ArrayList集合詳解(Java動態(tài)數(shù)組),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 讓你五分鐘徹底理解Spring MVC

    讓你五分鐘徹底理解Spring MVC

    其實MVC就是處理Web請求的一種框架模式,如果你對MVC不太熟悉的話可以看下本文,這篇文章主要給大家介紹了關(guān)于如何讓你五分鐘徹底理解Spring MVC的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • MyBatis Excutor 攔截器的巧妙用法

    MyBatis Excutor 攔截器的巧妙用法

    這里要講的巧妙用法是用來實現(xiàn)在攔截器中執(zhí)行額外 MyBatis 現(xiàn)有方法的用法,并提供了解決攔截Executor時想要修改MappedStatement時解決并發(fā)的問題。感興趣的朋友一起看看吧
    2017-10-10
  • 常用輸入字節(jié)流InputStream介紹

    常用輸入字節(jié)流InputStream介紹

    下面小編就為大家?guī)硪黄S幂斎胱止?jié)流InputStream介紹。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Mybatis-Plus根據(jù)時間段去查詢數(shù)據(jù)的實現(xiàn)示例

    Mybatis-Plus根據(jù)時間段去查詢數(shù)據(jù)的實現(xiàn)示例

    這篇文章主要介紹了Mybatis-Plus根據(jù)時間段去查詢數(shù)據(jù)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • JAVA的發(fā)展前景如何好不好自學(xué)

    JAVA的發(fā)展前景如何好不好自學(xué)

    這篇文章主要介紹了JAVA的發(fā)展前景如何好不好自學(xué),很多朋友想自學(xué)java不知道好不好學(xué),能不能學(xué)會,今天小編給大家分享一篇教程關(guān)于java的發(fā)展前景的文章,需要的朋友可以參考下
    2020-06-06
  • 簡單了解JAVA構(gòu)造方法

    簡單了解JAVA構(gòu)造方法

    構(gòu)造方法作用就是對類進(jìn)行初始化。 如果你沒有定議任何構(gòu)造方法的形式,程式會為你取一個不帶任何參數(shù)的構(gòu)造函數(shù),那么你產(chǎn)生類的對像時只能用不帶參數(shù)的方法.下面小編和大家來一起學(xué)習(xí)一下吧
    2019-06-06

最新評論

昭觉县| 兴隆县| 广昌县| 茌平县| 呼伦贝尔市| 绥中县| 福贡县| 江阴市| 柘荣县| 凤山县| 阳曲县| 鄂托克前旗| 寿光市| 个旧市| 深水埗区| 济宁市| 赤壁市| 龙川县| 会理县| 区。| 崇仁县| 乃东县| 新晃| 松原市| 亚东县| 和顺县| 虞城县| 唐山市| 祁连县| 武乡县| 青川县| 龙口市| 慈溪市| 邯郸县| 法库县| 苗栗市| 阳山县| 尚志市| 棋牌| 定兴县| 锦屏县|