map set list三種集合之間的關係及各自的特點

今天給大家帶來的是三種常用集合各自的性能分析,這裏只是淺談,就不深入講解底層了。

在這裏先上關係圖:



一,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允許重複






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章