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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java集合从菜鸟到大神演变

發(fā)布時(shí)間:2023/12/3 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java集合从菜鸟到大神演变 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載自?Java集合從菜鳥(niǎo)到大神演變

先來(lái)看一張集合概況圖,這里從上到下列舉了幾個(gè)最經(jīng)常用的集合

1、集合接口

java.util.Collection 是一個(gè)集合接口。它提供了對(duì)集合對(duì)象進(jìn)行基本操作的通用接口方法。Collection接口在Java 類庫(kù)中有很多具體的實(shí)現(xiàn)。Collection接口的意義是為各種具體的集合提供了最大化的統(tǒng)一操作方式。聲明了適用于JAVA集合(只包括Set和List)的通用方法。Set 和List 都繼承了Conllection,Map沒(méi)有.


2、集合類型

JAVA集合主要分為三種類型:Set(集),List(列表),Map(映射)


Set集合:集合元素是不能重復(fù)的,元素是沒(méi)有順序的,所以它不能基于位置訪問(wèn)元素。


List集合: 集合元素是可以重復(fù)的,元素是有順序的,所以它可以基于位置訪問(wèn)元素。


Map:它包含鍵值對(duì)。Map的鍵是不能重復(fù)的,可以保證元素的插入順序,也可以排序。


3、集合介紹

Set(集):

HashSet

HashSet是基于HashMap實(shí)現(xiàn)的,它不允許出現(xiàn)重復(fù)元素,不保證和政集合中元素的順序,允許包含值為null的元素,但最多只能有一個(gè)null元素。


TreeSet

TreeSet可以實(shí)現(xiàn)排序等功能的集合,它在講對(duì)象元素添加到集合中時(shí)會(huì)自動(dòng)按照某種比較規(guī)則將其插入到有序的對(duì)象序列中,并保證該集合元素按照“升序”排列。

  

LinkedHashSet

具有HashSet的查詢速度,且內(nèi)部使用鏈表維護(hù)元素的順序(插入的次序),于是在使用迭代器遍歷Set時(shí),結(jié)果會(huì)按元素插入的次序顯示。


List(列表):

ArrayList

內(nèi)部結(jié)構(gòu)基于數(shù)組實(shí)現(xiàn),可以對(duì)元素進(jìn)行隨機(jī)的訪問(wèn),向ArrayList中插入與刪除元素的速度慢。


LinkedList

LinkedList 是一個(gè)繼承于AbstractSequentialList的雙向鏈表,可以被當(dāng)作堆棧、隊(duì)列或雙端隊(duì)列進(jìn)行操作。LinkedList同時(shí)還實(shí)現(xiàn)了List、Deque(雙端隊(duì)列)、Cloneable(能克隆)、java.io.Serializable(支持序列化,能通過(guò)序列化去傳輸)等接口,LinkedList是非同步的。

每個(gè)節(jié)點(diǎn)除含有元素外,還包含向前,向后的指針。?
新建一個(gè)LinkedList,生成一個(gè)頭節(jié)點(diǎn)(header,就是一個(gè)頭指針),它的元素為null。?

它自包含,next和previous指針都指向自己。?執(zhí)行add(Object obj)方法后,會(huì)生成一個(gè)新節(jié)點(diǎn)?
?


Header節(jié)點(diǎn)的next指向鏈表的第一個(gè)節(jié)點(diǎn),previous指向鏈表的最后一個(gè)節(jié)點(diǎn),在這里都是first,再增加一個(gè)對(duì)象,它的形狀像下面這樣。?


Vector

Vector 是矢量隊(duì)列,它是JDK1.0版本添加的類。繼承于AbstractList,實(shí)現(xiàn)了List(支持相關(guān)的添加、刪除、修改、遍歷等), RandomAccess(隨機(jī)訪問(wèn)功能), Cloneable(能被克隆)這些接口。


Vector實(shí)際上是通過(guò)一個(gè)數(shù)組去保存數(shù)據(jù)的。當(dāng)我們構(gòu)造Vecotr時(shí);若使用默認(rèn)構(gòu)造函數(shù),則Vector的默認(rèn)容量大小是10。


當(dāng)Vector容量不足以容納全部元素時(shí),Vector的容量會(huì)增加。若容量增加系數(shù) >0,則將容量的值增加“容量增加系數(shù)”;否則,將容量大小增加一倍。Vector的克隆函數(shù),即是將全部元素克隆到一個(gè)數(shù)組中。和ArrayList不同,Vector中的操作是線程安全的。


Stack

Stack是棧,它的特性是:先進(jìn)后出(FILO, First In Last Out)。

Stack繼承于Vector(矢量隊(duì)列)的,由于Vector是通過(guò)數(shù)組實(shí)現(xiàn)的,這就意味著,Stack也是通過(guò)數(shù)組實(shí)現(xiàn)的,而非鏈表。


Map(映射):

  Map基于散列表的實(shí)現(xiàn),Map 是一種把鍵對(duì)象和值對(duì)象映射的集合,它的每一個(gè)元素都包含一對(duì)鍵對(duì)象和值對(duì)象。

HashMap

HashMap底層就是一個(gè)數(shù)組結(jié)構(gòu)(叫做Entry Table),數(shù)組中的每一項(xiàng)又是一個(gè)鏈表(叫做Bucket,用于解決hash沖突而設(shè)計(jì)的)。當(dāng)新建一個(gè)HashMap的時(shí)候,就會(huì)初始化一個(gè)數(shù)組。插入和查詢“鍵值對(duì)”的開(kāi)銷是固定的,可以通過(guò)構(gòu)造器設(shè)置容量capacity和負(fù)載因子load factor,以調(diào)整容器的性能。初始化結(jié)構(gòu)如下:

  

每個(gè)bucket包含一個(gè)Entry(map自定義的一種結(jié)構(gòu),包含一個(gè)往后的指針)的鏈表。?
在put(key, value)后,它的結(jié)構(gòu)如下:


LinkedHashMap

類似于HashMap,但是迭代遍歷它時(shí),取得“鍵值對(duì)”的順序是其插入次序,或者是最近最少使用(LRU)的次序,只比HashMap慢一點(diǎn)。而在迭代訪問(wèn)時(shí)發(fā)而更快,因?yàn)樗褂面湵砭S護(hù)內(nèi)部次序。

  

TreeMap

基于紅黑樹(shù)數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn),查看“鍵”或“鍵值對(duì)”時(shí),它們會(huì)被排序(次序由Comparabel或Comparator決定)。TreeMap的特點(diǎn)在于,你得到的結(jié)果是經(jīng)過(guò)排序的。TreeMap是唯一的帶有subMap()方法的Map,它可以返回一個(gè)子樹(shù)。

  

WeakHashMap

弱鍵(weak key)Map,Map中使用的對(duì)象也被允許釋放: 這是為解決特殊問(wèn)題設(shè)計(jì)的。如果沒(méi)有map之外的引用指向某個(gè)“鍵”,則此“鍵”可以被垃圾收集器回收。

  

IdentifyHashMap

使用==代替equals()對(duì)“鍵”作比較的hash map,專為解決特殊問(wèn)題而設(shè)計(jì)。


Hashtable

Hashtable與HashMap類似,Hashtable繼承自Dictionary類,實(shí)現(xiàn)了Map接口,不同的是它不允許記錄的鍵或者值為空;和HashMap相比,Hashtable是線程同步的,即任一時(shí)刻只有一個(gè)線程能寫Hashtable,因此也導(dǎo)致了 Hashtable在寫入時(shí)會(huì)比較慢。而且Hashtable可以通過(guò)Enumeration去遍歷。

?

? ? ? ??

4、總結(jié)

List按對(duì)象進(jìn)入的順序保存對(duì)象,不做排序或編輯操作。

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

Map同樣對(duì)每個(gè)元素保存一份,但這是基于"鍵"的,Map也有內(nèi)置的排序,因而不關(guān)心元素添加的順序。

如果添加元素的順序?qū)δ愫苤匾?#xff0c;應(yīng)該使用 LinkedHashSet/TreeSet或者LinkedHashMap/TreeMap. 


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


總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久99久久久久 | 深夜在线视频 | 光明影院手机版在线观看免费 | 99色网 | 欧美性猛交xxx乱久交 | 黄色短视频在线播放 | 女av在线| 欧美成人视 | 亚洲成人毛片 | 国产a视频免费观看 | 手机在线看片日韩 | 亚洲综合在线第一页 | 亚洲最大福利网 | 国语对白一区二区三区 | 国内一区二区三区 | 网站毛片 | 在线黄色av网站 | 老司机深夜福利网站 | 欧美午夜精品久久久久久孕妇 | www.国产成人 | 色妞av| 在线观看一区二区视频 | 瑟瑟在线视频 | 亚洲最大毛片 | 爽插| 黄色三级网站在线观看 | 99久久99九九99九九九 | 亚洲一本之道 | 日韩少妇诱惑 | 婷婷深爱网 | 国产精品粉嫩 | 动漫大乳美女 | 中文字字幕在线中文乱码 | 久久在线精品视频 | 亚洲无码久久久久 | 偷拍xxxx| 青青草97国产精品麻豆 | 免费a v在线 | 一曲二曲三曲在线观看中文字幕动漫 | 国产精品无码成人片 | 波多野结衣一二区 | 午夜激情毛片 | 午夜在线一区 | 99久久免费看精品国产一区 | 97中文在线 | 99视频在线免费观看 | 国产一区二区视频免费观看 | 性高潮久久久久 | 久久a视频| 国产手机av | 狠狠躁18三区二区一区传媒剧情 | 国产com| 免费成年人视频 | 欧美视频综合 | 三女警花合力承欢猎艳都市h | 伊人免费视频二 | 一久久久久 | 国产一区二区片 | 日韩av影音先锋 | 自拍偷拍欧美日韩 | 特级毛片在线播放 | 日韩黄色短片 | 97在线免费观看视频 | 国内精品视频在线播放 | 天堂√| 最新黄网| 亚洲图片三区 | 亚洲男人天堂2022 | 国产精品视频免费播放 | 国产精品jizz在线观看软件 | 人人看人人艹 | 日本三级一区 | 永久免费在线看片 | 爱爱视频在线免费观看 | 国产精品第9页 | 大桥未久恸哭の女教师 | 久久久久99人妻一区二区三区 | 丁香婷婷综合激情 | 致命弯道8在线观看免费高清完整 | 超碰人人草 | 久久精品国产亚洲av麻豆色欲 | 美景之屋电影免费高清完整韩剧 | 可以免费观看av | 国产精选一区 | www.亚洲黄色 | 国产一区二区在线免费观看视频 | 中文字幕人妻一区二区 | 欧美大奶在线 | 国产成人短视频在线观看 | 绯色av一区二区三区高清 | 亚洲系列在线 | 国产精品电影一区二区 | 国产精品日韩欧美大师 | 精品熟妇视频一区二区三区 | 欧美又大粗又爽又黄大片视频 | 想要xx视频| 欧美激情影音先锋 | 精品国产一区二区三 | 久久男人的天堂 |