您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java常用的集合有哪些”,在日常操作中,相信很多人在Java常用的集合有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java常用的集合有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
先來看一張集合概況圖,這里從上到下列舉了幾個最經常用的集合
1、集合接口
java.util.Collection 是一個集合接口。它提供了對集合對象進行基本操作的通用接口方法。Collection接口在Java 類庫中有很多具體的實現。Collection接口的意義是為各種具體的集合提供了最大化的統一操作方式。聲明了適用于JAVA集合(只包括Set和List)的通用方法。Set 和List 都繼承了Conllection,Map沒有.
JAVA集合主要分為三種類型:Set(集),List(列表),Map(映射)
Set集合:集合元素是不能重復的,元素是沒有順序的,所以它不能基于位置訪問元素。
List集合: 集合元素是可以重復的,元素是有順序的,所以它可以基于位置訪問元素。
Map:它包含鍵值對。Map的鍵是不能重復的,可以保證元素的插入順序,也可以排序。
3、集合介紹
Set(集):
HashSet
HashSet是基于HashMap實現的,它不允許出現重復元素,不保證和政集合中元素的順序,允許包含值為null的元素,但最多只能有一個null元素。
TreeSet
TreeSet可以實現排序等功能的集合,它在講對象元素添加到集合中時會自動按照某種比較規則將其插入到有序的對象序列中,并保證該集合元素按照“升序”排列。
LinkedHashSet
具有HashSet的查詢速度,且內部使用鏈表維護元素的順序(插入的次序),于是在使用迭代器遍歷Set時,結果會按元素插入的次序顯示。
List(列表):
ArrayList
內部結構基于數組實現,可以對元素進行隨機的訪問,向ArrayList中插入與刪除元素的速度慢。
LinkedList
LinkedList 是一個繼承于AbstractSequentialList的雙向鏈表,可以被當作堆棧、隊列或雙端隊列進行操作。LinkedList同時還實現了List、Deque(雙端隊列)、Cloneable(能克隆)、java.io.Serializable(支持序列化,能通過序列化去傳輸)等接口,LinkedList是非同步的。
每個節點除含有元素外,還包含向前,向后的指針。
新建一個LinkedList,生成一個頭節點(header,就是一個頭指針),它的元素為null。
它自包含,next和previous指針都指向自己。 執行add(Object obj)方法后,會生成一個新節點
Header節點的next指向鏈表的第一個節點,previous指向鏈表的最后一個節點,在這里都是first,再增加一個對象,它的形狀像下面這樣。
Vector
Vector 是矢量隊列,它是JDK1.0版本添加的類。繼承于AbstractList,實現了List(支持相關的添加、刪除、修改、遍歷等), RandomAccess(隨機訪問功能), Cloneable(能被克隆)這些接口。
Vector實際上是通過一個數組去保存數據的。當我們構造Vecotr時;若使用默認構造函數,則Vector的默認容量大小是10。
當Vector容量不足以容納全部元素時,Vector的容量會增加。若容量增加系數 >0,則將容量的值增加“容量增加系數”;否則,將容量大小增加一倍。Vector的克隆函數,即是將全部元素克隆到一個數組中。和ArrayList不同,Vector中的操作是線程安全的。
Stack
Stack是棧,它的特性是:先進后出(FILO, First In Last Out)。
Stack繼承于Vector(矢量隊列)的,由于Vector是通過數組實現的,這就意味著,Stack也是通過數組實現的,而非鏈表。
Map(映射):
Map基于散列表的實現,Map 是一種把鍵對象和值對象映射的集合,它的每一個元素都包含一對鍵對象和值對象。
HashMap
HashMap底層就是一個數組結構(叫做Entry Table),數組中的每一項又是一個鏈表(叫做Bucket,用于解決hash沖突而設計的)。當新建一個HashMap的時候,就會初始化一個數組。插入和查詢“鍵值對”的開銷是固定的,可以通過構造器設置容量capacity和負載因子load factor,以調整容器的性能。初始化結構如下:
每個bucket包含一個Entry(map自定義的一種結構,包含一個往后的指針)的鏈表。
在put(key, value)后,它的結構如下:
LinkedHashMap
類似于HashMap,但是迭代遍歷它時,取得“鍵值對”的順序是其插入次序,或者是最近最少使用(LRU)的次序,只比HashMap慢一點。而在迭代訪問時發而更快,因為它使用鏈表維護內部次序。
TreeMap
基于紅黑樹數據結構的實現,查看“鍵”或“鍵值對”時,它們會被排序(次序由Comparabel或Comparator決定)。TreeMap的特點在于,你得到的結果是經過排序的。TreeMap是唯一的帶有subMap()方法的Map,它可以返回一個子樹。
WeakHashMap
弱鍵(weak key)Map,Map中使用的對象也被允許釋放: 這是為解決特殊問題設計的。如果沒有map之外的引用指向某個“鍵”,則此“鍵”可以被垃圾收集器回收。
IdentifyHashMap
使用==代替equals()對“鍵”作比較的hash map,專為解決特殊問題而設計。
Hashtable
Hashtable與HashMap類似,Hashtable繼承自Dictionary類,實現了Map接口,不同的是它不允許記錄的鍵或者值為空;和HashMap相比,Hashtable是線程同步的,即任一時刻只有一個線程能寫Hashtable,因此也導致了 Hashtable在寫入時會比較慢。而且Hashtable可以通過Enumeration去遍歷。
到此,關于“Java常用的集合有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。