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

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

前言:

本文是對(duì)Java集合框架做了一個(gè)概括性的解說,目的是對(duì)Java集合框架體系有個(gè)總體認(rèn)識(shí),如果你想學(xué)習(xí)具體的接口和類的使用方法惹盼,請(qǐng)參看Java API文檔唤反。

一、概述

數(shù)據(jù)結(jié)構(gòu)對(duì)程序設(shè)計(jì)有著深遠(yuǎn)的影響柴信,在面向過程的C語言中套啤,數(shù)據(jù)庫(kù)結(jié)構(gòu)用struct來描述,而在面向?qū)ο蟮木幊讨兴娉#瑪?shù)據(jù)結(jié)構(gòu)是用類來描述的潜沦,并且包含有對(duì)該數(shù)據(jù)結(jié)構(gòu)操作的方法。

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

Java程序員在具體應(yīng)用時(shí)枣察,不必考慮數(shù)據(jù)結(jié)構(gòu)和算法實(shí)現(xiàn)細(xì)節(jié)喇闸,只需要用這些類創(chuàng)建出來一些對(duì)象,然后直接應(yīng)用就可以了询件。這樣就大大提高了編程效率燃乍。

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

Collection是集合接口

|————Set子接口:無序宛琅,不允許重復(fù)刻蟹。

|————List子接口:有序,可以有重復(fù)元素嘿辟。

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

Set和List對(duì)比:

Set:檢索元素效率低下舆瘪,刪除和插入效率高片效,插入和刪除不會(huì)引起元素位置改變。

List:和數(shù)組類似英古,List可以動(dòng)態(tài)增長(zhǎng)淀衣,查找元素效率高,插入刪除元素效率低召调,因?yàn)闀?huì)引起其他元素位置改變膨桥。

Set和List具體子類:

Set

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

List

|————ArrayList:動(dòng)態(tài)數(shù)組

|————LinkedList:鏈表只嚣、隊(duì)列、堆棧艺沼。

Array和java.util.Vector

Vector是一種老的動(dòng)態(tài)數(shù)組册舞,是線程同步的,效率很低障般,一般不贊成使用调鲸。

三、Iterator迭代器(接口)

Iterator是獲取集合中元素的過程挽荡,實(shí)際上幫助獲取集合中的元素藐石。

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

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

方法名稱得到了改進(jìn)。

Iterator僅有一個(gè)子接口ListIterator募狂,是列表迭代器办素,允許程序員按任一方向遍歷列表、迭代期間修改列表祸穷,并獲得迭代器在列表中的當(dāng)前位置性穿。ListIterator 沒有當(dāng)前元素;它的光標(biāo)位置 始終位于調(diào)用 previous() 所返回的元素和調(diào)用 next() 所返回的元素之間雷滚。在長(zhǎng)度為 n 的列表中需曾,有 n+1 個(gè)有效的索引值,從 0 到 n(包含)祈远。

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

Map將鍵映射到值的對(duì)象。一個(gè)映射不能包含重復(fù)的鍵车份;每個(gè)鍵最多只能映射一個(gè)值谋减。

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

Map 接口提供三種collection 視圖扫沼,允許以鍵集出爹、值集合或鍵-值映射關(guān)系集的形式查看某個(gè)映射的內(nèi)容庄吼。映射的順序 定義為迭代器在映射的 collection 視圖中返回其元素的順序。某些映射實(shí)現(xiàn)可明確保證其順序严就,如 TreeMap 類总寻;某些映射實(shí)現(xiàn)則不保證順序,如 HashMap 類梢为。

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

HashMap:基于哈希表的 Map 接口的實(shí)現(xiàn)渐行。此實(shí)現(xiàn)提供所有可選的映射操作,并允許使用 null 值和 null 鍵抖誉。(除了不同步和允許使用 null 之外殊轴,HashMap 類與 Hashtable 大致相同。)此類不保證映射的順序袒炉,特別是它不保證該順序恒久不變旁理。

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

Hashtable:此類實(shí)現(xiàn)一個(gè)哈希表芋哭,該哈希表將鍵映射到相應(yīng)的值。任何非 null 對(duì)象都可以用作鍵或值郁副。

五减牺、線程安全類

在集合框架中,有些類是線程安全的存谎,這些都是JDK1.1中的出現(xiàn)的拔疚。在JDK1.2之后,就出現(xiàn)許許多多非線程安全的類既荚。

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

Vector:就比ArrayList多了個(gè)同步化機(jī)制(線程安全)稚失。

Statck:堆棧類,先進(jìn)后出恰聘。

Hashtable:就比HashMap多了個(gè)線程安全句各。

Enumeration:枚舉,相當(dāng)于迭代器晴叨。

除了這些之外凿宾,其他的都是非線程安全的類和接口。

線程安全的類其方法是同步的兼蕊,每次只能一個(gè)訪問菌湃。是重量級(jí)對(duì)象,效率較低遍略。對(duì)于非線程安全的類和接口惧所,在多線程中需要程序員自己處理線程安全問題骤坐。

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

Dictionary和Hashtable類:

Dictionary提供鍵值映射的功能下愈,是個(gè)抽象類纽绍。一般使用它的子類HashTable類。遍歷Hashtable類要用到枚舉势似。

Properties類

Properties 繼承于 Hashtable拌夏,Properties 類表示了一個(gè)持久的屬性集。Properties 可保存在流中或從流中加載履因。屬性列表中每個(gè)鍵及其對(duì)應(yīng)值都是一個(gè)字符串障簿。一般可以通過讀取properties配置文件來填充Properties對(duì)象。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末栅迄,一起剝皮案震驚了整個(gè)濱河市站故,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毅舆,老刑警劉巖西篓,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異憋活,居然都是意外死亡岂津,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門悦即,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吮成,“玉大人,你說我怎么就攤上這事辜梳×桓Γ” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵冗美,是天一觀的道長(zhǎng)魔种。 經(jīng)常有香客問我析二,道長(zhǎng)粉洼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任叶摄,我火速辦了婚禮属韧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蛤吓。我一直安慰自己宵喂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布会傲。 她就那樣靜靜地躺著锅棕,像睡著了一般拙泽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上裸燎,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天顾瞻,我揣著相機(jī)與錄音,去河邊找鬼德绿。 笑死荷荤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的移稳。 我是一名探鬼主播蕴纳,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼个粱!你這毒婦竟也來了古毛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤几蜻,失蹤者是張志新(化名)和其女友劉穎喇潘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梭稚,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颖低,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了弧烤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忱屑。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖暇昂,靈堂內(nèi)的尸體忽然破棺而出莺戒,到底是詐尸還是另有隱情,我是刑警寧澤急波,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布从铲,位于F島的核電站,受9級(jí)特大地震影響澄暮,放射性物質(zhì)發(fā)生泄漏名段。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一泣懊、第九天 我趴在偏房一處隱蔽的房頂上張望伸辟。 院中可真熱鬧,春花似錦馍刮、人聲如沸信夫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)静稻。三九已至警没,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間振湾,已是汗流浹背惠奸。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恰梢,地道東北人佛南。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嵌言,于是被迫代替她去往敵國(guó)和親嗅回。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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

  • 前言: 本文是對(duì)Java集合框架做了一個(gè)概括性的解說摧茴,目的是對(duì)Java集合框架體系有個(gè)總體認(rèn)識(shí)容握。 一女责、概述 數(shù)據(jù)結(jié)...
    零點(diǎn)145閱讀 130評(píng)論 0 0
  • 簡(jiǎn)介 集合框架:用于存儲(chǔ)數(shù)據(jù)的容器。 集合框架是為表示和操作集合而規(guī)定的一種統(tǒng)一的標(biāo)準(zhǔn)的體系結(jié)構(gòu)。任何集合框架都包...
    程序論閱讀 21,330評(píng)論 0 1
  • Java集合框架奠旺,數(shù)據(jù)結(jié)構(gòu) 所有的集合類位于 jdk下的 rt.jar 包下java.util下堰燎; 1析苫、所有集合類...
    kaixingdeshui閱讀 317評(píng)論 0 0
  • title: java集合框架學(xué)習(xí)總結(jié) tags:集合框架 categories:總結(jié) date: 2017-03...
    行徑行閱讀 1,685評(píng)論 0 2
  • 今天在看了好多個(gè)集合帖子后發(fā)現(xiàn)講的都是一半一半的,這下就逼死我這個(gè)強(qiáng)迫癥患者了.于是自己寫點(diǎn),有不足之處還望各位道...
    迷迷糊糊m閱讀 198評(píng)論 0 0