map set list三種集合之間的關係及各自的特點
阿新 • • 發佈:2019-01-08
今天給大家帶來的是三種常用集合各自的效能分析,這裡只是淺談,就不深入講解底層了。
在這裡先上關係圖:
一,Conllection:
接下來先看一下Collection介面:
他有兩個子介面,Set和List,
1,Set(公共特點;無序)
是一個無序的集合介面,並且元素不可重複,當然,這裡的無序是針對放入順序而言,並不是絕對的無序,他有兩個子類,一個是hashSet,還有一個是繼承了SortedSet介面的TreeSet,這兩個set集合有什麼特點呢?
首先,hashSet的底層是hashmap,他有著hashmap中鍵的特性,那就是,無序,不可重複性,
其次,treeset實現了sortset介面,sortedset有排序能力,也就意味著treeset也有著排序的能力,他是使用二叉樹進行排序的。
2,list(有序):
list介面也有兩個子類,一個是arraylist,一個是linkedList,
首先arralist的底層是object[]是一個數組,也就意味著他有著陣列的特性,但是和陣列相比他比陣列靈活,無需設定長度,他是有序的,所以查詢塊,增刪比較慢,
和arralist其實有一個兄弟叫vector,他和arralist是一樣的
Vector是執行緒安全的,也就是說是它的方法之間是執行緒同步的,而arralist執行緒是非同步的也就是說他是不安全的,但是效率高,相比之下,建議使用arralist.,
linkedlist:
他底層是以連結串列的形式進行排序的,兩個元素之間就如同鏈子一樣前關聯,如果進行增刪操作的時候,只需要將某個元素替換然後將後邊的關聯簡單修改就可以完成,所以說建議查詢用arralist,增刪用linkedlist;
二,map(公共特點特點:以鍵值對的形式儲存,):
簡單來講常用的map類的集合也有三個,常用的有三個子類實現了mapj介面:map存在的意義就是為了快速查詢,通過鍵的直接找到值,因為鍵是不可重複的。
1,hashMap和hashtable:
兩者放在一起比較(底層都是hash表結構):hashmap執行緒是不安全的允許鍵值對為null,二hashtable執行緒是安全的不允許鍵值對為null,兩者的其他屬性是一樣的,所以兩者的使用要看具體的情況而定,
2,treemap(底層是二叉樹)
,執行緒不同步,可用於給Map集合中的鍵進行排序
,雖然說有些集合是無序的,但是子類個別的也是按照另一種方式進行了排序,只不過不符合我們日常的排序方式。是按照某種規則進行的。
Map中元素,可以將key序列、value序列單獨抽取出來。 使用keySet()抽取key序列,將map中的所有keys生成一個Set。 使用values()抽取value序列,將map中的所有values生成一個Collection。 為什麼一個生成Set,一個生成Collection?那是因為,key總是獨一無二的,value允許重複