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!