各種集合類的區別以及原理
阿新 • • 發佈:2018-04-20
底層實現 不可 lin RR 集合類 shc 位置 spa set hash值相等,若是相等則用equals方法比較,如果不相等,則添加(說明沒有重復的值)
key值的hashCode,hashCode%length = i,要存的entry,若此時entry上已經有值了那麽在這個位置上的元素將以鏈表的形式存放,新加入的放在鏈頭,最先加入的放在鏈尾。如果數組該位置上沒有元素,就直接將該元素放到此數組中的該位置上。
集合區別:
list:(有序可重復)
ArrayList:底層實現是數組,但是沒有定義具體的長度和大小,有下標,所以查詢快,增刪慢,線程不安全
LinkedList: 底層是鏈表,因為有指針所以增刪快查詢慢,線程不安全
Vector:底層是數組,線程安全,有下標所以查詢快增刪慢,有synchronized修飾,現已被ArrayList替代
Set:(無序不重復)
HashSet:底層是hash表結構,實現了set接口,其實是基於hashMap實現的,不能有null值,在添加數據時(add方法),會調用對象的hashcode()方法在set中去查找,比較要添加的值和set中的值若是
TreeSet:底層是二叉樹結構,不可以存重復對象,根據數據自身進行排序,如果沒有可比性,則實現comparable接口重寫compareTo方法(該方法是使某個對象具有可比性),也可重寫compartor接口重寫compare方法(該方法是使某個集合具有可比性)
Map:(存鍵值對)
HashMap:底層是哈希表(數組+鏈表)結構,線程不安全,可以存一個null鍵和多個null值,若要線程安全則Collections.synchronizedMap()方法,在添加新值的時候(put)會去計算將添加
HashTable:底層是哈希表(數組+鏈表)結構,線程安全,不可以存null鍵或者null值
TreeMap:底層實二叉樹結構,可以存重復對象,實現comparable接口重寫compareTo方法(該方法是使某個對象具有可比性),也可重寫compartor接口重寫compare方法(該方法是使某個集合具有可比性)
各種集合類的區別以及原理