1. 程式人生 > >各種集合類的區別以及原理

各種集合類的區別以及原理

底層實現 不可 lin RR 集合類 shc 位置 spa set

集合區別:

list:(有序可重復)

  ArrayList:底層實現是數組,但是沒有定義具體的長度和大小,有下標,所以查詢快,增刪慢,線程不安全

  LinkedList: 底層是鏈表,因為有指針所以增刪快查詢慢,線程不安全

  Vector:底層是數組,線程安全,有下標所以查詢快增刪慢,有synchronized修飾,現已被ArrayList替代

Set:(無序不重復)

  HashSet:底層是hash表結構,實現了set接口,其實是基於hashMap實現的,不能有null值,在添加數據時(add方法),會調用對象的hashcode()方法在set中去查找,比較要添加的值和set中的值若是

hash值相等,若是相等則用equals方法比較,如果不相等,則添加(說明沒有重復的值)

  TreeSet:底層是二叉樹結構,不可以存重復對象,根據數據自身進行排序,如果沒有可比性,則實現comparable接口重寫compareTo方法(該方法是使某個對象具有可比性),也可重寫compartor接口重寫compare方法(該方法是使某個集合具有可比性)

Map(存鍵值對)

  HashMap:底層是哈希表(數組+鏈表)結構,線程不安全,可以存一個null鍵和多個null值,若要線程安全則Collections.synchronizedMap()方法,在添加新值的時候(put)會去計算將添加

key值的hashCodehashCode%length = i,要存的entry,若此時entry上已經有值了那麽在這個位置上的元素將以鏈表的形式存放,新加入的放在鏈頭,最先加入的放在鏈尾。如果數組該位置上沒有元素,就直接將該元素放到此數組中的該位置上。

  HashTable:底層是哈希表(數組+鏈表)結構,線程安全,不可以存null鍵或者null

  TreeMap:底層實二叉樹結構,可以存重復對象,實現comparable接口重寫compareTo方法(該方法是使某個對象具有可比性),也可重寫compartor接口重寫compare方法(該方法是使某個集合具有可比性)

各種集合類的區別以及原理