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

java.util.Collection源碼分析與深度理解

 更新時間:2019年03月03日 15:08:26   作者:FOEVERYANG  
這篇文章主要給大家介紹了關(guān)于java.util.Collection的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

寫在開頭

java.util.Collection 作為Java開發(fā)最常用的接口之一,我們經(jīng)常使用,今天我?guī)Т蠹乙黄鹧芯恳幌翪ollection接口,希望對大家以后的編程以及系統(tǒng)設(shè)計能有所幫助,本文所研究的jdk版本為jdk1.8.0_131

明確一下幾點:

  • Collection是接口,其繼承了Iterable接口
  • Collection屬于單值類型集合,重點子接口List接口和Set接口

    

Java.util.List接口(有序、不唯一)

   ArraryList

       

  ArrayList 是一個數(shù)組隊列,相當于 動態(tài)數(shù)組。與Java中的數(shù)組相比,它的容量能動態(tài)增長。它繼承于AbstractList,實現(xiàn)了List, RandomAccess, Cloneable, java.io.Serializable這些接口。ArrayList是非同步的,效率高但是線程不安全,Collections.sychromiziedList(new ArraryList<>());可以讓那個ArrayList變成線程安全類

  • ArrayList是基于動態(tài)數(shù)組實現(xiàn)的,在增刪時候,需要數(shù)組的拷貝復(fù)制。
  • ArrayList的默認初始化容量是10,每次擴容時候增加原先容量的一半,也就是變?yōu)樵瓉淼?.5倍
  • 刪除元素時不會減少容量,若希望減少容量則調(diào)用trimToSize()
  • 它不是線程安全的。它能存放null值。

   LinkedList

  

  LinkedList是一個雙向循環(huán)列表隊列

  • LinkedList 是一個繼承于AbstractSequentialList的雙向鏈表。它也可以被當作堆棧、隊列或雙端隊列進行操作。
  • LinkedList 實現(xiàn) List 接口,能對它進行隊列操作。
  • LinkedList 實現(xiàn) Deque 接口,即能將LinkedList當作雙端隊列使用。
  • LinkedList 實現(xiàn)了Cloneable接口,即覆蓋了函數(shù)clone() ,能克隆。
  • LinkedList 實現(xiàn)java.io.Serializable接口,這意味著LinkedList支持序列化,能通過序列化去傳輸。
  • LinkedList 是非同步的。

   Vector

底層是數(shù)組,現(xiàn)在已少用,被ArrayList替代,原因有兩個:

  • Vector所有方法都是同步,有性能損失。
  • Vector初始length是10 超過length時 以100%比率增長,相比于ArrayList更多消耗內(nèi)存。
  • 參考資料:https://www.zhihu.com/question/31948523/answer/113357347

  總的來說:查詢多用ArrayList,增刪多用LinkedList。

  ArrayList增刪慢不是絕對的(在數(shù)量大的情況下,會有例外):

  • 如果增加元素一直是使用add() (增加到末尾)的話,并且不擴容的情況下)
  • 一直刪除末尾的元素也是ArrayList要快【不用復(fù)制移動位置】
  • 至于如果刪除的是中間的位置的話,還是ArrayList要快!

  但一般來說:增刪多還是用LinkedList,因為上面的情況是極端的~

Java.util.Set接口(無序、唯一)

                                  |——SortedSet接口——TreeSet實現(xiàn)類

               Set接口——|——HashSet實現(xiàn)類               

                                   |——LinkedHashSet實現(xiàn)類

  hashSet

  hashSet底層基于hashMap實現(xiàn),如圖

  hashSet中的add()方法,是將對象E放入hashMap中的key的位置,value位置存放的是一個固定的Object,如圖:

  

HashSet是無序唯一的,當元素為自定義對象時,兩者的hashCode不同,被認為是不同的元素從而被允許放入HashSet中,但這不符合實際的生產(chǎn)意義,因此需要讓其判定位相等,就要重寫hashCode() ,然而重寫HashCode() ,會出現(xiàn)重碼的bug,因此需要重寫equals()來解決

  添加元素的時候,如果key(也對應(yīng)的Set集合的元素)相等,那么則修改value值。而在Set集合中,value值僅僅是一個Object對象罷了(該對象對Set本身而言是無用的)。

也就是說:Set集合如果添加的元素相同時,是根本沒有插入的(僅修改了一個無用的value值),從源碼(HashMap)中也看出來,==和equals()方法都有使用,具體過程如下

  • 新元素的hsah是否等于老元素的hash,如果不相等,則元素不同,如果相等,那么進行第二部比較
  • 新元素與老元素用“==”進行比較,如果相等,則為同一元素,若不同則進行第三部比較
  • 新元素和老元素用equals()方法判定是否相等,如果不等則不是同一元素,如果相等那么結(jié)果為:兩個元素不是同一個對象,程序想把它們當成同一個對象,因此重寫了equals方法;

  TreeSet

   與HashSet是基于HashMap實現(xiàn)一樣,TreeSet同樣是基于TreeMap實現(xiàn)的。

TreeSet是SortedSet接口的唯一實現(xiàn)類,TreeSet可以確保集合元素處于排序狀態(tài)。TreeSet支持兩種排序方式,自然排序 和定制排序,其中自然排序為默認的排序方式。向  TreeSet中加入的應(yīng)該是同一個類的對象。

  LinkedHashSet 

   LinkedHashSet是HashSet的一個“擴展版本”,HashSet并不管什么順序,不同的是LinkedHashSet會維護“插入順序”。HashSet內(nèi)部使用HashMap對象來存儲它的元素,而LinkedHashSet內(nèi)部使用LinkedHashMap對象來存儲和處理它的元素

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • SpringBoot發(fā)送郵箱驗證碼功能

    SpringBoot發(fā)送郵箱驗證碼功能

    這篇文章主要介紹了SpringBoot發(fā)送郵箱驗證碼功能,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • SpringCloud?hystrix斷路器與全局解耦全面介紹

    SpringCloud?hystrix斷路器與全局解耦全面介紹

    什么是服務(wù)降級?當服務(wù)器壓力劇增的情況下,根據(jù)實際業(yè)務(wù)情況及流量,對一些服務(wù)和頁面有策略的不處理或換種簡單的方式處理,從而釋放服務(wù)器資源以保證核心交易正常運作或高效運作
    2022-10-10
  • SpringBoot訪問web中的靜態(tài)資源的方式小結(jié)

    SpringBoot訪問web中的靜態(tài)資源的方式小結(jié)

    這篇文章主要介紹了SpringBoot訪問web中的靜態(tài)資源的方式,本文給大家介紹了兩種方式,通過代碼示例和圖文講解的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-10-10
  • java8中:: 用法示例(JDK8雙冒號用法)

    java8中:: 用法示例(JDK8雙冒號用法)

    這篇文章主要給大家介紹了關(guān)于java8 中的:: 用法(JDK8雙冒號用法)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用java8具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • spring security與corsFilter沖突的解決方案

    spring security與corsFilter沖突的解決方案

    這篇文章主要介紹了spring security與corsFilter沖突的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 關(guān)于Controller 層返回值的公共包裝類的問題

    關(guān)于Controller 層返回值的公共包裝類的問題

    本文給大家介紹Controller 層返回值的公共包裝類-避免每次都包裝一次返回-InitializingBean增強,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2021-09-09
  • hibernate查詢緩存詳細分析

    hibernate查詢緩存詳細分析

    這篇文章主要介紹了hibernate查詢緩存詳細分析,包括查詢緩存配置方法及關(guān)閉二級緩存的詳細介紹,需要的朋友參考下本文吧
    2017-09-09
  • 詳解SpringBoot中@ConditionalOnClass注解的使用

    詳解SpringBoot中@ConditionalOnClass注解的使用

    這篇文章主要和大家詳細介紹一下springboot中@ConditionalOnClass注解的用法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-08-08
  • SpringBoot整合minio快速入門教程(代碼示例)

    SpringBoot整合minio快速入門教程(代碼示例)

    這篇文章主要介紹了SpringBoot整合minio快速入門實現(xiàn)文件上傳和下載的示例代碼,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • Spring超詳細講解創(chuàng)建BeanDefinition流程

    Spring超詳細講解創(chuàng)建BeanDefinition流程

    Spring在初始化過程中,將xml中定義的對象解析到了BeanDefinition對象中,我們有必要了解一下BeanDefinition的內(nèi)部結(jié)構(gòu),有助于我們理解Spring的初始化流程
    2022-06-06

最新評論

高尔夫| 来宾市| 奉化市| 屯门区| 云梦县| 师宗县| 霍邱县| 昌乐县| 伊春市| 襄城县| 衡东县| 防城港市| 玉屏| 绥芬河市| 昌吉市| 易门县| 香河县| 利津县| 闽侯县| 湖北省| 毕节市| 江阴市| 平江县| 辽宁省| 河源市| 苍南县| 鲁山县| 岳普湖县| 宜城市| 剑阁县| 东阿县| 玉树县| 南郑县| 建水县| 万载县| 合阳县| 巴彦淖尔市| 博野县| 澎湖县| 阳朔县| 津市市|