Java集合框架使用總結(jié)

前言:

本文是對Java集合框架做了一個概括性的解說妇多,目的是對Java集合框架體系有個總體認識壳快。

一、概述

數(shù)據(jù)結(jié)構(gòu)對程序設計有著深遠的影響贞绵,在面向過程的C語言中厉萝,數(shù)據(jù)庫結(jié)構(gòu)用struct來描述,而在面向?qū)ο蟮木幊讨校瑪?shù)據(jù)結(jié)構(gòu)是用類來描述的谴垫,并且包含有對該數(shù)據(jù)結(jié)構(gòu)操作的方法章母。

在Java語言中,Java語言的設計者對常用的數(shù)據(jù)結(jié)構(gòu)和算法做了一些規(guī)范(接口)和實現(xiàn)(具體實現(xiàn)接口的類)翩剪。所有抽象出來的數(shù)據(jù)結(jié)構(gòu)和操作(算法)統(tǒng)稱為Java集合框架(Java Collection Framework)乳怎。

Java程序員在具體應用時,不必考慮數(shù)據(jù)結(jié)構(gòu)和算法實現(xiàn)細節(jié)前弯,只需要用這些類創(chuàng)建出來一些對象蚪缀,然后直接應用就可以了。這樣就大大提高了編程效率恕出。

二询枚、集合框架的層次結(jié)構(gòu)

Collection是集合接口

??????? |————Set子接口:無序,不允許重復浙巫。

??????? |————List子接口:有序金蜀,可以有重復元素。

區(qū)別:Collections是集合類

Set和List對比:

Set:檢索元素效率低下狈醉,刪除和插入效率高廉油,插入和刪除不會引起元素位置改變。

List:和數(shù)組類似苗傅,List可以動態(tài)增長抒线,查找元素效率高,插入刪除元素效率低渣慕,因為會引起其他元素位置改變嘶炭。

Set和List具體子類:

Set

?|————HashSet:以哈希表的形式存放元素,插入刪除速度很快逊桦。

List

?|————ArrayList:動態(tài)數(shù)組

?|————LinkedList:鏈表眨猎、隊列、堆棧强经。

Array和java.util.Vector

Vector是一種老的動態(tài)數(shù)組帮掉,是線程同步的,效率很低历涝,一般不贊成使用薪缆。

三、Iterator迭代器(接口)

Iterator是獲取集合中元素的過程炬称,實際上幫助獲取集合中的元素汁果。

迭代器代替了 Java Collections Framework 中的 Enumeration。迭代器與枚舉有兩點不同:

迭代器允許調(diào)用方利用定義良好的語義在迭代期間從迭代器所指向的集合移除元素玲躯。

方法名稱得到了改進据德。

Iterator僅有一個子接口ListIterator鳄乏,是列表迭代器,允許程序員按任一方向遍歷列表棘利、迭代期間修改列表橱野,并獲得迭代器在列表中的當前位置。ListIterator 沒有當前元素赡译;它的光標位置 始終位于調(diào)用 previous() 所返回的元素和調(diào)用 next() 所返回的元素之間仲吏。在長度為 n 的列表中,有 n+1 個有效的索引值蝌焚,從 0 到 n(包含)裹唆。

四、集合框架之外的Map接口

Map將鍵映射到值的對象只洒。一個映射不能包含重復的鍵许帐;每個鍵最多只能映射一個值。

Map接口是Dictionary(字典)抽象類的替代品毕谴。

Map 接口提供三種collection 視圖成畦,允許以鍵集、值集合或鍵-值映射關系集的形式查看某個映射的內(nèi)容涝开。映射的順序 定義為迭代器在映射的 collection 視圖中返回其元素的順序循帐。某些映射實現(xiàn)可明確保證其順序,如 TreeMap 類舀武;某些映射實現(xiàn)則不保證順序拄养,如 HashMap 類。

有兩個常見的已實現(xiàn)的子類:

HashMap:基于哈希表的 Map 接口的實現(xiàn)银舱。此實現(xiàn)提供所有可選的映射操作瘪匿,并允許使用 null 值和 null 鍵。(除了不同步和允許使用 null 之外寻馏,HashMap 類與 Hashtable 大致相同棋弥。)此類不保證映射的順序,特別是它不保證該順序恒久不變诚欠。

TreeMap:它實現(xiàn)SortedMap 接口的基于紅黑樹的實現(xiàn)顽染。此類保證了映射按照升序順序排列關鍵字,根據(jù)使用的構(gòu)造方法不同轰绵,可能會按照鍵的類的自然順序 進行排序(參見 Comparable)家乘,或者按照創(chuàng)建時所提供的比較器進行排序。

Hashtable:此類實現(xiàn)一個哈希表藏澳,該哈希表將鍵映射到相應的值。任何非 null 對象都可以用作鍵或值耀找。

五翔悠、線程安全類

在集合框架中业崖,有些類是線程安全的,這些都是JDK1.1中的出現(xiàn)的蓄愁。在JDK1.2之后双炕,就出現(xiàn)許許多多非線程安全的類。

下面是這些線程安全的同步的類:

Vector:就比ArrayList多了個同步化機制(線程安全)撮抓。

Statck:堆棧類妇斤,先進后出。

Hashtable:就比HashMap多了個線程安全丹拯。

Enumeration:枚舉站超,相當于迭代器。

除了這些之外乖酬,其他的都是非線程安全的類和接口死相。

線程安全的類其方法是同步的,每次只能一個訪問咬像。是重量級對象算撮,效率較低。對于非線程安全的類和接口县昂,在多線程中需要程序員自己處理線程安全問題肮柜。

六、其他一些接口和類介紹

Dictionary和Hashtable類:

Dictionary提供鍵值映射的功能倒彰,是個抽象類审洞。一般使用它的子類HashTable類。遍歷Hashtable類要用到枚舉狸驳。

Properties類

Properties 繼承于 Hashtable预明,Properties 類表示了一個持久的屬性集。Properties 可保存在流中或從流中加載耙箍。屬性列表中每個鍵及其對應值都是一個字符串撰糠。一般可以通過讀取properties配置文件來填充Properties對象。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辩昆,一起剝皮案震驚了整個濱河市阅酪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌汁针,老刑警劉巖术辐,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異施无,居然都是意外死亡辉词,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門猾骡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瑞躺,“玉大人敷搪,你說我怎么就攤上這事〈鄙冢” “怎么了赡勘?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長捞镰。 經(jīng)常有香客問我闸与,道長,這世上最難降的妖魔是什么岸售? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任践樱,我火速辦了婚禮,結(jié)果婚禮上冰评,老公的妹妹穿的比我還像新娘映胁。我一直安慰自己,他們只是感情好甲雅,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布解孙。 她就那樣靜靜地躺著,像睡著了一般抛人。 火紅的嫁衣襯著肌膚如雪弛姜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天妖枚,我揣著相機與錄音廷臼,去河邊找鬼。 笑死绝页,一個胖子當著我的面吹牛荠商,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播续誉,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼莱没,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了酷鸦?” 一聲冷哼從身側(cè)響起饰躲,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎臼隔,沒想到半個月后嘹裂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡摔握,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年寄狼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氨淌。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡例嘱,死狀恐怖狡逢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拼卵,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布蛮艰,位于F島的核電站腋腮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏壤蚜。R本人自食惡果不足惜即寡,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望袜刷。 院中可真熱鬧聪富,春花似錦、人聲如沸著蟹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萧豆。三九已至奸披,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涮雷,已是汗流浹背阵面。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留洪鸭,地道東北人样刷。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像览爵,于是被迫代替她去往敵國和親置鼻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

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

  • 四拾枣、集合框架 1:String類:字符串(重點) (1)多個字符組成的一個序列沃疮,叫字符串。生活中很多數(shù)據(jù)的描述都采...
    佘大將軍閱讀 752評論 0 2
  • 一梅肤、基礎知識:1司蔬、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機...
    殺小賊閱讀 2,378評論 0 4
  • Java集合類可用于存儲數(shù)量不等的對象,并可以實現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)如棧,隊列等,Java集合還可以用于保存具有映射關...
    小徐andorid閱讀 1,939評論 0 13
  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX閱讀 875評論 0 1
  • Java SE 基礎: 封裝姨蝴、繼承俊啼、多態(tài) 封裝: 概念:就是把對象的屬性和操作(或服務)結(jié)合為一個獨立的整體,并盡...
    Jayden_Cao閱讀 2,109評論 0 8