java 集合類

java 集合類.png

* Iterable

迭代器接口梗摇,是Collection類的父接口勺届。

實現(xiàn)這個Iterable接口的對象允許使用foreach進(jìn)行遍歷斗锭。

這個Iterable接口只有一個方法: iterator()由桌。它返回一個代表當(dāng)前集合對象的泛型<T>迭代器,用于遍歷操作帆谍。

一伪朽、Collection:

最基本的集合接口,它不提供直接的實現(xiàn)汛蝙。

實現(xiàn)了 Collection 接口的類都必須提供兩套標(biāo)準(zhǔn)的構(gòu)造函數(shù)烈涮,一個是無參,用于創(chuàng)建一個空的 Collection患雇,一個是帶有 Collection 參數(shù)的有參構(gòu)造函數(shù)跃脊,用于創(chuàng)建一個新的 Collection,這個新的 Collection 與傳入進(jìn)來的 Collection 具備相同的元素苛吱。

1、 List:

有序可重復(fù)器瘪;

允許元素為null翠储;

另外還提供一個 listIterator()方法绘雁,返回一個 ListIterator 接口,和標(biāo)準(zhǔn)的 Iterator 接口相比援所,ListIterator 多了一些 add()之類的方法庐舟,允許添加,刪除住拭,設(shè)定元素挪略, 還能向前或向后遍歷;

  • 1.1 ArrayList:
    查詢速度快滔岳,適合隨機(jī)訪問杠娱;
    內(nèi)部結(jié)構(gòu)是數(shù)組;
    初始容量是10谱煤;
    存放有序摊求,元素可以重復(fù)也可以為null;
    插入和刪除的移動速度慢刘离;動態(tài)擴(kuò)容1.5倍室叉;
    線程不安全;

  • 1.2 LinkedList:
    增刪速度快硫惕,涉及增刪頻繁的數(shù)據(jù)茧痕;
    內(nèi)部結(jié)構(gòu)是雙向鏈表;
    元素存放有序恼除,允許元素為null凿渊,可重復(fù);
    線程不安全;
    實現(xiàn)了Queue接口缚柳、Deque接口埃脏,即能將LinkedList當(dāng)作隊列或雙端隊列使用,也可以被當(dāng)作"棧"來使用秋忙。接口窄化了對LinkedList的方法的訪問權(quán)限(如Queue<String> queue = new LinkedList<String>();只能訪問Queue接口所定義的方法 了彩掐,而不能直接訪問 LinkedList的非Queue的方法);

  • 1.3 Vector :
    操作與ArrayList相似灰追;
    與ArrayList區(qū)別:線程安全堵幽;

  • 1.4 Stack
    繼承自 Vector,后進(jìn)先出弹澎;
    Stack 提供 5 個額外的方法使得 Vector 得以被當(dāng)作堆棧使用: push 和 pop 方法朴下, peek 方法得到棧頂?shù)脑兀琫mpty 方法測試堆棧是否為空苦蒿,search 方法檢測一個元素在堆棧中的位置殴胧;
    Stack 剛創(chuàng)建后是空棧;

2、 Set:

不允許重復(fù)元素团滥,實現(xiàn)原理是基于Map竿屹,Set利用Map中“鍵”不能重復(fù)的特性實現(xiàn),java是先實現(xiàn)了Map灸姊,然后通過包裝了一個所有value都為null的Map就實現(xiàn)了Set集合拱燃;

Set判斷兩個對象相同不是使用"=="運算符,而是根據(jù)equals方法力惯。equals()決定是否可以加入HashSet碗誉、而hashCode()決定存放的位置,它們兩者必須同時滿足才能允許一個新元素加入HashSet父晶。

如果兩個對象的hashCode相同哮缺,但是它們的equlas返回值不同,HashSet會在這個位置用鏈?zhǔn)浇Y(jié)構(gòu)來保存多個對象诱建。而HashSet訪問集合元素時也是根據(jù)元素的HashCode值來快速定位的蝴蜓,這種鏈?zhǔn)浇Y(jié)構(gòu)會導(dǎo)致性能下降。

如果需要把某個類的對象保存到HashSet集合中俺猿,我們在重寫這個類的equlas()方法和hashCode()方法時茎匠,應(yīng)該盡量保證兩個對象通過equals()方法比較返回true時,它們的hashCode()方法返回值也相等

  • 2.1 HashSet:
    底層實現(xiàn)是HashMap(),不允許重復(fù)元素(key)押袍;
    存放無序(根據(jù)hash確定索引位置)诵冒;
    存取速度比較快;
    允許元素為null(最多只能有一個null元素)谊惭;
    HashSet集合判斷兩個元素相等的標(biāo)準(zhǔn)是兩個對象通過equals()方法比較相等汽馋,并且兩個對象的hashCode()方法的返回值相等;

  • 2.2 LinkedHashSet:
    繼承HashSet圈盔,跟HashSet類似豹芯,唯一區(qū)別:存放元素有序,當(dāng)遍歷LinkedHashSet集合里的元素時驱敲,LinkedHashSet將會按元素的添加順序來訪問集合里的元素铁蹈;
    遍歷性能比HashSet好,但插入刪除的性能會差點众眨;
    允許元素為null(最多只能有一個null元素)握牧;

  • 2.3 TreeSet:(HashSet的整體性能總比TreeSet好,特別是添加和查詢操作娩梨,只有當(dāng)一個保持排序的Set時才使用TreeSet)
    TreeSet是SortedSet接口的實現(xiàn)類沿腰;
    以紅黑樹的形式存儲集合元素;
    是SortedSet接口的唯一實現(xiàn)類狈定;
    不允許元素重復(fù)颂龙, 不允許元素為null;
    自動排序元素;

3厘托、Queue:

先進(jìn)先出

二友雳、Map:

以Key-Value鍵值對存在稿湿,key不允許重復(fù)铅匹;

Map中包括一個內(nèi)部類:Entry。該類封裝了一個key-value對饺藤,Entry包含三個方法:
Object getkey():返回該Entry里包含的key值包斑。
Object getValue():返回該Entry里包含的value值。
Object setValue():設(shè)置該Entry里包含的value值涕俗,并返回新設(shè)置的value值罗丰。

Map一般很少輸出,一般作為查詢使用再姑,如果要迭代萌抵,必須聲明一個類型為Map.Entry的Set接口,接收map.entrySet()元镀,然后用Set 的Iteractor遍歷(或foreach遍歷Set集合)绍填,getKey()得到key,getValue()得到value

  • HashMap:(適用于在Map中插入、刪除和定位元素)
    數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)和鏈表實現(xiàn)的栖疑。Entry[] table+鏈表存儲來解決hash沖突讨永;
    允許key和value為null,key重復(fù)會覆蓋遇革;
    存放無序卿闹;
    線程不安全;

Hashmap實現(xiàn)請看jdk8 hashmap

  • LinkedHashMap:(需要維護(hù)元素的插入順序萝快,因此性能略低于HashMap的性能锻霎,但在迭代訪問Map里的全部元素時將有很好的性能,因為它以鏈表來維護(hù)內(nèi)部順序揪漩,同時又可避免使用TreeMap所增加的成本)
    HashMap子類旋恼;
    數(shù)據(jù)結(jié)構(gòu)是雙向鏈表;
    存放元素有序(鏈表定義了迭代順序氢拥,該迭代順序與key-value對的插入順序保持一致)蚌铜;
    線程不安全;

  • TreeMap:(適用于按自然順序或自定義順序遍歷鍵(key)嫩海,HashMap通常比TreeMap快一點(樹和哈希表的數(shù)據(jù)結(jié)構(gòu)使然)冬殃,在需要排序的Map時候才用TreeMap.)
    不允許Key為null, value可以為null;
    有序;
    線程不安全;
    速度慢叁怪;

    TreeMap兩種排序方法:
    自然排序:TreeMap的所有key必須實現(xiàn)Comparable接口审葬,而且所有key應(yīng)該是同一個類的對象,否則將會拋出ClassCastExcepiton異常。

    定制排序:創(chuàng)建TreeMap時涣觉,傳入一個Comparator對象痴荐,該對象負(fù)責(zé)對TreeMap中所有key進(jìn)行排序。采用定制排序時不要求Map的key實現(xiàn)Comparable接口官册。

  • WeakHashMap

    WeakHashMap與HashMap的用法基本相似生兆。區(qū)別在于,HashMap的key保留了對實際對象的"強(qiáng)引用"膝宁,這意味著只要該HashMap對象不被銷毀鸦难,該HashMap所引用的對象就不會被垃圾回收。但WeakHashMap的key只保留了對實際對象的弱引用员淫,這意味著如果WeakHashMap對象的key所引用的對象沒有被其他強(qiáng)引用變量所引用合蔽,則這些key所引用的對象可能被垃圾回收,當(dāng)垃圾回收了該key所對應(yīng)的實際對象之后介返,WeakHashMap也可能自動刪除這些key所對應(yīng)的key-value對拴事。

  • Hashtable
    同步,線程安全圣蝎;(HashTable容器使用synchronized來保證線程安全刃宵,在線程競爭激烈的情況下HashTable的效率非常低下。當(dāng)一個線程訪問HashTable的同步方法時捅彻,其他線程訪問HashTable的同步方法時组去,可能會進(jìn)入阻塞或輪詢狀態(tài))
    不允許null值,key和value都不可以

ArrayList與Vector的區(qū)別:

ArrayList是JDK1.2之后推出的步淹,比Vector新从隆。

ArrayList采用異步處理的方式,性能更高缭裆。Vector采用同步處理键闺。

ArrayList非線程安全,vector線程安全澈驼。

ArrayList只能用Iterator辛燥、foreach輸出,Vector除此之外還可以用Enumeration輸出缝其。

HashMap與HashTable的區(qū)別

HashTable是舊的操作類挎塌。

HashMap采用異步處理,性能更高内边。HashTable同步處理榴都。

HashMap線程不安全,HashTable線程安全漠其。

HashMap允許key設(shè)為null嘴高,Hashtable不允許竿音。

Collection與collections的區(qū)別

Collection是一個接口;Collections是一個類拴驮,里面有很多靜態(tài)方法春瞬,這個類不能實例化。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末套啤,一起剝皮案震驚了整個濱河市宽气,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纲岭,老刑警劉巖抹竹,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件线罕,死亡現(xiàn)場離奇詭異止潮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)钞楼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門喇闸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人询件,你說我怎么就攤上這事燃乍。” “怎么了宛琅?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵刻蟹,是天一觀的道長。 經(jīng)常有香客問我嘿辟,道長舆瘪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任红伦,我火速辦了婚禮英古,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘昙读。我一直安慰自己召调,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布蛮浑。 她就那樣靜靜地躺著唠叛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沮稚。 梳的紋絲不亂的頭發(fā)上艺沼,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機(jī)與錄音壮虫,去河邊找鬼澳厢。 笑死环础,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剩拢。 我是一名探鬼主播线得,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼徐伐!你這毒婦竟也來了贯钩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤办素,失蹤者是張志新(化名)和其女友劉穎角雷,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體性穿,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡勺三,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了需曾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吗坚。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖呆万,靈堂內(nèi)的尸體忽然破棺而出商源,到底是詐尸還是另有隱情,我是刑警寧澤谋减,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布牡彻,位于F島的核電站,受9級特大地震影響出爹,放射性物質(zhì)發(fā)生泄漏庄吼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一以政、第九天 我趴在偏房一處隱蔽的房頂上張望霸褒。 院中可真熱鬧,春花似錦盈蛮、人聲如沸废菱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽殊轴。三九已至,卻和暖如春袒炉,著一層夾襖步出監(jiān)牢的瞬間旁理,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工我磁, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留孽文,地道東北人驻襟。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像芋哭,于是被迫代替她去往敵國和親沉衣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Collection & Map Collection 子類有 List 和 Set List --> Array...
    任教主來也閱讀 3,169評論 1 9
  • Java集合類可用于存儲數(shù)量不等的對象,并可以實現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)如棧,隊列等,Java集合還可以用于保存具有映射關(guān)...
    小徐andorid閱讀 1,946評論 0 13
  • 一减牺、集合與Map 接口說明 1. Collection接口Collection是最基本的集合接口豌习,一個Collec...
    木有粗面_9602閱讀 355評論 0 1
  • 在我看來很多高情商的人只有“商“卻沒有“情“肥隆;與之相反,許多情商低的人卻是有“情”無“商”稚失! 在學(xué)校...
    黎淼閱讀 1,376評論 0 1
  • 據(jù)說如果你在晚上12點對著鏡子梳頭栋艳,你會透過鏡子看見不可思議的東西…… 我躺在床上愈發(fā)感到無聊,不是手機(jī)不好玩也不...
    沂尾魚閱讀 3,160評論 0 0