日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java集合从菜鸟到大神演变

發布時間:2023/12/3 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java集合从菜鸟到大神演变 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自?Java集合從菜鳥到大神演變

先來看一張集合概況圖,這里從上到下列舉了幾個最經常用的集合

1、集合接口

java.util.Collection 是一個集合接口。它提供了對集合對象進行基本操作的通用接口方法。Collection接口在Java 類庫中有很多具體的實現。Collection接口的意義是為各種具體的集合提供了最大化的統一操作方式。聲明了適用于JAVA集合(只包括Set和List)的通用方法。Set 和List 都繼承了Conllection,Map沒有.


2、集合類型

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去遍歷。

?

? ? ? ??

4、總結

List按對象進入的順序保存對象,不做排序或編輯操作。

Set對每個對象只接受一次,并使用自己內部的排序方法(通常,你只關心某個元素是否屬于Set,而不關心它的順序--否則應該使用List)。

Map同樣對每個元素保存一份,但這是基于"鍵"的,Map也有內置的排序,因而不關心元素添加的順序。

如果添加元素的順序對你很重要,應該使用 LinkedHashSet/TreeSet或者LinkedHashMap/TreeMap. 


最后還要提到集合類里面一個很重要的類:Collections,它有很多自己獨特的靜態方法。當然它主要提供幾種特殊集合(List, Map,Set),可以調用靜態方法來獲得:Unmodifiable*(不可修改集合,不可添加或刪除元素),Synchronize*(保持同步集合,它的基本每個方法都加鎖,防止并發操作),Checked*(聲明之始傳入特定類型,以后的操作都會驗證加入元素是否屬于已定類型),Singleton*(集合中只包含一個元素)。它們都是通過包裝集合類中的抽象類獲得,產生不同的行為。?


總結

以上是生活随笔為你收集整理的Java集合从菜鸟到大神演变的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。