collection介面的子介面包括set介面和list介面
map介面的實現類主要有:hashmap、treemap、hashtable、concurrenthashmap以及properties等
set介面的主要實現類主要有:hashset、treeset、linkedhashset等
list介面的主要實現類有:arraylist、linkedlist、stack以及vector等
collection包括list、set兩大介面
list:乙個有序(元素存入集合的順序和取出的順序一樣)容器,元素可以重複,可以存入多個null元素,元素有索引。
set:乙個無序(存入和取出順序可能不一樣)容器,元素不能重複,只能存入乙個null元素,元素必須保證唯一性。
map:是乙個鍵值對集合,儲存鍵、值之間的對映。key:無序,且唯一。value:不要求有序,允許重複。map沒有繼承collection,從map集合中檢索元素時,只要給出鍵物件,就會返回對應的值物件。
collection
list
set
map
優點:缺點:
arraylist比較適合順序新增、隨機訪問的場景。
綜合來說,在需要頻繁讀取集合中元素時,更推薦arraylist,而在插入和刪除操作較多的時候,更推薦linkedlist。
這兩個類都實現了list介面,他們都是有序的集合。hashset是基於hashmap實現的,hashset的值存放在hashmap的key上,hashmap的value統一為present,因此hashset的實現比較簡單,相關的hashset操作,基本上的都是呼叫底層hashmap的相關方法來完成,hashset不允許重複的值。
hashmap概述:hashmap是基於雜湊表的map介面而非同步實現。此實現提供可選的對映操作,並允許使用null值和null鍵,此類不保證對映的順序。
hashmap的資料結構:hashmap實際上是乙個"鍊錶雜湊"的資料結構,即陣列和鍊錶的結合體。
hashmap是基於hash演算法實現的
當我們往hashmap中put元素時,利用key的hashcode重新hash計算出當前物件的元素在陣列中的下標。
儲存時,如果存在相同hash值的key,此時會有兩種情況。(1)如果key相同,則會覆蓋原始的值(2)如果key不同(出現衝突),則將當前的key-value放入鍊錶中。
獲取時,直接找到hash值對應的下標,在進一步的判斷key是否相同,從而找到對應的值。
jdk1.8中對hashmap進行了優化,當鍊表中的節點資料超過8個之後,該鍊錶會轉化為紅黑樹來提高查詢效率,從原來的o(n)到o(logn)
jdk1.8以前採用的拉鍊法。拉鍊法:將鍊錶和陣列相結合。陣列中每一格就是乙個鍊錶。若遇到hash衝突,則將衝突的值加到鍊錶中即可。
jdk1.8之後,當鍊表的長度大於閾值(預設為8)時,將鍊錶轉化為紅黑樹,以減少搜尋的時間。
hashmap實現了map介面
hashset實現了set介面
hashmap儲存鍵值對
hashset僅僅儲存鍵物件
使用put()方法將元素放入map中
使用add()方法將元素放入set中
hashmap中使用鍵物件來計算hashcode值
hashset使用成員物件來計算hashcode值,對於兩個物件來說hashcode可能相同,所以equals()方法用來判斷物件的相等性,如果兩個物件不同的話,那麼返回false
hashmap比較快,因為是使用唯一的鍵來獲取物件
hashset較hashmap來說比較慢
執行緒安全:hashtable內部的方法基本都見過synchronized修飾,所以hashtable是執行緒安全,hashmap是非執行緒安全。(如果要保證執行緒安全,使用concurrenthashmap)
效率:因為執行緒安全,hashmap比hashtable效率高。(hashtable基本不使用)
對於null的支援:hashmap中,null可以作為鍵,這樣的鍵只能有乙個,可以有乙個或者多個鍵所對應的值為null。但是在hashtable中put的值只要是null就會丟擲空指標異常。
擴容:(1)建立時如果不指定容量初始值,hashtable預設的初始大小為11,之後每次擴容,容量變為原來的2n+1。hashtable預設為16,之後每次擴容,容量都會變成原來的2倍。
(2)指定了大小時,hashtable會直接使用指定的大小。而hashmap會將其擴充為2的冪次方大小,也就是說hashmap總會使用2的冪作為雜湊表的大小。
底層資料結構:主要體現在jdk1.8以後,hashmap採用了陣列+鍊錶+紅黑樹。而hashtable沒有這樣的機制。
Java基礎知識 集合框架
student arr new student 5 儲存學生物件 arr 0 new student 張三 23 arr 1 new student 李四 24 arr 2 new student 王五 25 arr 3 new student 趙六 26 arr 4 new student 馬哥 ...
java集合框架理解知識點
hashmap 是key value樣式 底層是陣列加鍊表的樣式,後面改為陣列 鍊錶 紅黑樹的儲存方式 陣列是主體,如果本身建立的時候沒有指定大小則預設大小為16。得到key值對應的hashcode,運用位與運算計算該key值對應的陣列下表,迴圈該位置的鍊錶,使用eques方法比較鍊錶中的key值,...
集合框架 Map集合
map集合 同collection,是集合框架中的頂層介面。一次新增一對元素,collection一次新增乙個元素。所有,map集合也稱為雙列集合,collection集合稱為單列集合。介面map key是鍵,value是值,其實map集合中儲存的就是鍵值對,map集合中必須保證鍵的唯一性。常用方法...