2019.7.18 java常見的集合

一.前言
集合的概念對我來說太不清晰了,上頭!(今天是現女友,手動狗頭)

二.常見的集合接口(三大接口)
Map接口和Collection接口(Set接口和List接口)是所有集合框架的頂級接口

  • Map接口的實現類主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等
  • Set接口的實現類主要有:HashSet、TreeSet、LinkedHashSet等
  • List接口的實現類主要有:ArrayList、LinkedList、Stack以及Vector等

三.主要區別

  1. Map(鍵值對、鍵唯一、值不唯一)
  2. Set(無序、不能重複)
  3. List(有序、能重複)

四.具體說明

1.Map接口

  • HashMap:類實現一個哈希表,該哈希表將鍵映射到相應的值。任何非 null 對象都可以用作鍵或值。爲了成功地在哈希表中存儲和獲取對象,用作鍵的對象必須實現 hashCode 方法和 equals 方法。

  • HashTable:數組加鏈表實現。插入和查詢“鍵值對”的開銷是固定的。可以通過構造器設置容量capacity和負載因子load factor,以調整容器的性能。

  • LinkedHashMap:類似於HashMap,但是迭代遍歷它時,取得“鍵值對”的順序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一點。而在迭代訪問時發而更快,因爲它使用鏈表維護內部次序。

  • ConcurrentHashMap:ConcurrentHashMap內部使用段(Segment)來表示這些不同的部分,每個段其實就是一個小的hashtable,它們有自己的鎖。只要多個修改操作發生在不同的段上,它們就可以併發進行。

  • TreeMap:基於紅黑樹數據結構的實現。查看“鍵”或“鍵值對”時,它們會被排序(次序由Comparabel或Comparator決定)。TreeMap的特點在於,你得到的結果是經過排序的。TreeMap是唯一的帶有subMap()方法的Map,它可以返回一個子樹。

Q1:HashMap與HashTable的區別?

  • HashMap沒有考慮同步,是線程不安全的;Hashtable使用了synchronized關鍵字,是線程安全的;
  • HashMap允許K/V都爲null;後者K/V都不允許爲null;
  • HashMap繼承自AbstractMap類;而Hashtable繼承自Dictionary類;

2.Set接口
無序可變的數組,不允許添加重複元素,如果視圖把兩個相同的元素加入到同一個集合中,add方法返回false。

  • HashSet:HashSet是使用哈希表(hash table)實現的,其中的元素是無序的。

  • LinkedHashSet:LinkedHashSet集合同樣是根據HashCode()方法來決定元素的存儲位置,但是它同時使用鏈表維護元素的次序.這樣使得元素看起來像是以插入順序保存的,當遍歷該集合的時候,LinkedHashSet將會以元素的添加順序訪問集合的元素.

  • TreeSet:TreeSet是SortedSet接口的唯一實現類,TreeSet可以確保集合元素處於排序狀態。TreeSet支持兩種排序方式,自然排序 和定製排序,其中自然排序爲默認的排序方式。TreeSet判斷兩個對象不相等的方式是兩個對象通過equals方法返回false,或者通過CompareTo方法比較沒有返回0

Q1:HashSet是如何保證數據不可重複的?
HashSet的底層是HashMap,只不過HashSet實現了Set接口並且把數據作爲K值,K值本身不允許重複,並且在HashMap中如果K/V相同時,會用新的V覆蓋掉舊的V,然後返回舊的V,那麼在HashSet中執行這一句話始終會返回一個false,導致插入失敗,這樣就保證了數據的不可重複性;

3.List接口
一個 List 是一個元素有序的、可以重複、可以爲 null 的集合(有時候我們也叫它“序列”)

  • ArrayList:代表長度可以改變得數組。可以對元素進行隨機的訪問,向ArrayList()中插入與刪除元素的速度慢。
  • LinkedList:在實現中採用鏈表數據結構。插入和刪除速度快,訪問速度慢。
  • Vector:Vector與ArrayList一樣,也是通過數組實現的,不同的是它支持線程的同步,即某一時刻只有一個線程能夠寫Vector,避免多線程同時寫而引起的不一致性,但實現同步需要很高的花費,因此,訪問它比訪問ArrayList慢。

參考:https://blog.csdn.net/weixin_39464761/article/details/75137902

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