Java十分鐘精通集合的使用與原理上篇

什麼是集合?

比如我們去買超市買很多東西,我們不可能拿一樣就去收銀臺,我們可能是先放到購物車內,然後再統一處理,所以購物車相當於一個容器,可以裝很多東西,在Java中的集合也是相當於一個容器,可以裝很多數據。

集合繼承關系圖:

但是這張圖太復雜瞭,我們看一張簡便的:

集合分為Collection和Map兩種體系

一、Collection接口:

collection 接口有 3 種子類型集合: List、Set 和 Queue,再下面是一些抽象類,最後是具體實現類,常用的有 ArrayList、LinkedList、HashSet等(常用的幾類)

Queue這個接口平時不常用,這裡就不進行介紹,主要介紹ArrayList和Set:

ArrayList:儲存有序並且可以重復的對象

Set:儲存無序並且不可以重復的對象

List分為ArrayList和LinkedList:

ArrayLis:底層是數組結構,儲存有序並且可以重復的對象

LinkedList:底層是鏈表結構,儲存有序並且可以重復的對象

Set下有HashSet這個實現類:

HashSet:存儲不能重復的對象,如果重復瞭程序並不會出錯,但是後面的內容會覆蓋前面的重復的

二、Map接口下分為HashMap和TreeMap:

註意:Map類型的集合是以鍵值對的形式來儲存(Key:Value),保持具有映射關系的數據,因此Map集合用來保存無序的 鍵值對形式的值。根據鍵key來獲取到對應的值。學過Python的同學肯定知道字典,沒錯,Map的格式就是和Python中的字典一致,比如:

{red=紅色, green=綠色, yellow=黃色}

HashSet的特點:

  • 無序
  • HashSet是以Hash算法來記錄再內存中無序存儲的對象的,速度更快.
  • HashSet不是線程同步的,非線程安全的.
  • HashSet可以存儲null

Map分為:

  • HashMap
  • LinkedHashMap
  • HashTable
  • ConcurrentHashMap
  • EnumMap
  • TreeMap

LinkedHashMap

LinkedHashMap是以鏈表式存儲的HashMap,並且是以Hash算法來獲取hashcode的值來獲取內存中的數 據,存儲的順序和讀取的順序一致。

HashTable

HashMap和HashTable的作用一樣,都是無序的鍵值對形式存儲,HashTable考慮線程安全,HashMap不考 慮線程安全。 凡是線程安全的效率沒有非線程安全的高。

ConcurrentHashMap

也是和HashMap線程一樣,但是它考慮線程安全。HashTable是采用給當前線程加鎖實現線程安全, ConcurrentHashMap是采用分段鎖機制來實現線程安全。

EnumMap

專門用來存儲枚舉的Map集合

TreeMap

TreetSet是SortSet接口的實現類,TreeSet可以保證元素處於排序狀態再保存。它采用的是紅黑樹算法數 據結構來存儲集合元素。TreeSet支持兩種排序:

  • 自然排序和定制排序
  • 默認采用自然排序(在集合第二章介紹)

註意:如果是存儲大量的數據,我們一般是不會用Map去存儲。Map一般用於存儲小量並且可以無序的鍵值對存儲的數據。比如登錄頁面的用戶名、密碼等等。

集合總結:

  • 集合是用於存儲對象並且可以無限擴容,可以以有序、無序、鍵值對形式來存儲對象
  • List接口下都是存儲有序的可重復的元素集合,ArrayList是以數組形式存儲,LinkedList以鏈表式存儲
  • 凡是以LinkedXXX都是雙向鏈表式存儲的集合,都是有序並按插入的順序存儲
  • 凡是以HashXXX是以哈希算法存儲,無序不可重復,獲取速度快
  • 凡是TreeXXX都是以紅黑樹算法排序後再存儲,分自然排序和定制排序
  • 集合中插入的值都是引用類型,它會將基本類型自動裝箱成包裝類型再存儲到集合中

Collections工具類:

註意:不要和Collection搞錯咯,這個是加瞭個s,是一個工具類,它包含有各種有關集合操作的靜態多態方法。此類不能實例化,集合可以使用 Collections來對數據進行排序等等很多方法,具體可看官方文檔:

https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Collections.html

集合的文字內容比較多,類型也比較多,容易混淆,小應學長將在下一章對常見的集合類型進行代碼演示。

到此這篇關於Java十分鐘精通集合的使用與原理上篇的文章就介紹到這瞭,更多相關Java 集合內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: