日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java集合类复习

發布時間:2024/9/19 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java集合类复习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java集合類復習

接口關系

Collection是集合set,list,Queue的基本接口。

Map:是映射表的基礎接口。

Iterator:迭代器接口

List接口

List 是有序的 Collection。List 一共三個實現類: ArrayList、Vector 和 LinkedList。List定義了若干線性結構數據的操作方法。

ArrayList(動態數組)

ArrayList 是最常用的 List 實現類,內部是通過數組實現的,它允許對元素進行快速隨機訪問。

ArrayList只能裝引用型對象。并且 ArrayList線程不安全

當數組大小不滿足時需要增加存儲能力,就要將已經有數組的數據復制到新的存儲空間中。 當從 ArrayList 的中間位置插入或者刪除元素時,需要對數組進行復制、移動、代價比較高。因此,它適合隨機查找和遍歷,不適合插入和刪除。


Vector(數組,線程安全)

Vector 與 ArrayList 一樣,也是通過數組實現的,不同的是它支持線程的同步。

Vector是使用synchronized實現線程安全的 ,但實現同步需要很高的花費,因此,訪問它比訪問 ArrayList 慢。


LinkList(鏈表)

LinkList是線程不安全的。

LinkedList 是用鏈表結構存儲數據的 ,很適合數據的動態插入和刪除,隨機訪問和遍歷速度比較慢。并且它格外實現了List接口中沒定義的方法,對鏈表的頭元素和未元素進行操作。

Set接口

Set 是一個無序的集合類接口,注重獨一無二的性質,值不能重復。

Set根據hashCode 值判斷對象是否相等,hashCode 值是依據對象的內存地址計算出的。


HashSet(Hash 表)

HashSet 存儲元素的順序并不是按照存入時的順序 ,而是按照哈希值來存的所以取數據也是按照哈希值取得。 HashSet 首先判斷兩個元素的哈希值,如果哈希值一樣,接著會比較equals 方法 如果 equls 結果為 true ,HashSet 就視為同一個元素。這樣主要是避免哈希沖突,所以還會使用equals 方法。

哈希值相同 equals 為 false 的元素是在同樣的哈希值下順延,就像哈希桶一樣。HashSet 通過 hashCode 值來確定元素在內存中的位置。 一個 hashCode 位置上可以存放多個元素


TreeSet(紅黑樹)

TreeSet是使用二叉樹的原理對新 add()的對象按照指定的順序排序,TreeSet底層存儲是使用紅黑樹實現的 。每增加一個對象都會進行排序,將對象插入的二叉樹指定的位置。

自定義類的對象必須實現 Comparable 接口,并且覆寫相應的 compareTo()函數,才可以正常使用。


LinkedHashSet

LinkedHashSet是HashSet+LinkedHashMap的組合體。

LinkedHashSet 底層使用 LinkedHashMap 來保存所有元素,它繼承與 HashSet,并且其所有的方法操作上又與 HashSet 相同。


HashMap(數組+鏈表,紅黑樹)

HashMap根據鍵的 hashCode 值存儲數據,HashMap 最多只允許一條記錄的鍵為 null。HashMap 非線程安全, 可以用 Collections 的 synchronizedMap 方法使HashMap 具有線程安全的能力。

  • HashMap (JDK1.7):底層實現是數組+鏈表,HashMap 里面是一個數組,然后數組中每個元素是一個單向鏈表。并且鏈表元素是Entry 的實例。Entry 包含四個屬性:key, value, hash 值和用于單向鏈表的 next。
  • HashMap (JDK1.8):底層實現是數組+鏈表+紅黑樹,當鏈表中的元素超過了 8 個以后,會將鏈表轉換為紅黑樹。

HashMap構造函數的參數解析:

  • capacity:當前數組容量,始終保持 2^n,可以擴容。當數組的使用值到達擴容的閾值時進行2倍擴容。
  • loadFactor:負載因子,默認為 0.75
  • threshold:擴容的閾值

結構圖:

參考博文:https://www.cnblogs.com/myseries/p/10876843.html


ConcurrentHashMap(線程安全)

ConcurrentHashMap的 Segment段 。ConcurrentHashMap和HashMap相似,ConcurrentHashMap 由一個個 Segment 組成。每一個Segment是一組數組,我們姑且叫它 Segment數組。 ConcurrentHashMap是線程安全的 ,內部使用的是ReentrantLock 來進行加鎖。每次需要加鎖的操作鎖住的是一個 segment,這樣只要保證每個 Segment 是線程安全的。

  • JDK1.7 下的ConcurrentHashMap結構:底層實現是 Segment數組+鏈表 , 上鎖的對象是Segment,類似于分段鎖。通過ReentrantLock 來進行加鎖來實現線程安全。
  • JDK1.8 下的ConcurrentHashMap結構:底層實現是 Segment數組+鏈表+紅黑樹 ,跟HashMap類似。但鏈表長度大于某個閥值就變紅黑樹。

ConcurrentHashMap相關參數解析:

  • concurrencyLevel:并行級別(Segment數組個數),默認是 16,Segment數組不可擴容

結構圖:

HashTable(線程安全)

映射的常用功能與 HashMap 類似,可以看作是線程安全版的HashMap,不同的是它承自 Dictionary 類。 HashTable是線程安全的 ,并發性上不如ConcurrentHashMap,因為HashTable沒有像ConcurrentHashMap一樣的分段鎖,同意時間只能有一個線程能寫Hashtable。Hashtable一般不用,我們一般使用HashMap或者ConcurrentHashMap。

TreeMap(紅黑)

TreeMap的底層使用了紅黑樹來實現 ,像TreeMap對象中放入一個key-value 鍵值對時,就會生成一個Entry對象。

TreeMap 實現 SortedMap 接口,能夠把它保存的記錄根據鍵排序,在使用 TreeMap 時,key 必須實現 Comparable 接口或者在構造 TreeMap 傳入自定義的Comparator。跟Treeset相似,也是通過對象的Comparable的接口方法來進行排序的,只不過 TreeMap使用key的Comparable 接口方法對比,而Treeset是直接使用對象的Comparable 接口方法對比

LinkedHashMap

LinkedHashMap 是 HashMap 的一個子類,保存了記錄的插入順序。

排序的,只不過 TreeMap使用key的Comparable 接口方法對比,而Treeset是直接使用對象的Comparable 接口方法對比

LinkedHashMap

LinkedHashMap 是 HashMap 的一個子類,保存了記錄的插入順序。

總結

以上是生活随笔為你收集整理的Java集合类复习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。