介紹 Collection 框架的結(jié)構(gòu)

集合框架:

Collection:List列表,Set集

Map:Hashtable根竿,HashMap族壳,TreeMap

Collection是單列集合

List元素是有序的、可重復(fù)

有序的collection尺上,可以對列表中每個元素的插入位置進行精確地控制。

可以根據(jù)元素的整數(shù)索引(在列表中的位置)訪問元素圆到,并搜索列表中的元素怎抛。

可存放重復(fù)元素,元素存取是有序的芽淡。

List接口中常用類

lVector:線程安全马绝,但速度慢,已被ArrayList替代吐绵。

底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組結(jié)構(gòu)

lArrayList:線程不安全迹淌,查詢速度快。

底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組結(jié)構(gòu)

lLinkedList:線程不安全己单。增刪速度快唉窃。

底層數(shù)據(jù)結(jié)構(gòu)是列表結(jié)構(gòu)

Set(集)元素?zé)o序的、不可重復(fù)纹笼。

取出元素的方法只有迭代器纹份。不可以存放重復(fù)元素,元素存取是無序的廷痘。

Set接口中常用的類

lHashSet:線程不安全蔓涧,存取速度快。

它是如何保證元素唯一性的呢笋额?依賴的是元素的hashCode方法和euqals方法元暴。

lTreeSet:線程不安全,可以對Set集合中的元素進行排序兄猩。

它的排序是如何進行的呢茉盏?通過compareTo或者compare方法中的來保證元素的唯一性。元素是以二叉樹的形式存放的枢冤。

Map是一個雙列集合

|--Hashtable:線程安全鸠姨,速度快。底層是哈希表數(shù)據(jù)結(jié)構(gòu)淹真。是同步的讶迁。

不允許null作為鍵,null作為值核蘸。

|--Properties:用于配置文件的定義和操作巍糯,使用頻率非常高啸驯,同時鍵和值都是字符串。

是集合中可以和IO技術(shù)相結(jié)合的對象鳞贷。(到了IO在學(xué)習(xí)它的特有和io相關(guān)的功能坯汤。)

|--HashMap:線程不安全,速度慢搀愧。底層也是哈希表數(shù)據(jù)結(jié)構(gòu)。是不同步的疆偿。

允許null作為鍵咱筛,null作為值。替代了Hashtable.

|--LinkedHashMap:可以保證HashMap集合有序杆故。存入的順序和取出的順序一致迅箩。

|--TreeMap:可以用來對Map集合中的鍵進行排序.

Collection和Collections的區(qū)別

Collection是集合類的上級接口,子接口主要有Set和List处铛、Map饲趋。

Collections是針對集合類的一個幫助類,提供了操作集合的工具方法:一系列靜態(tài)方法實現(xiàn)對各種集合的搜索撤蟆、排序奕塑、線程安全化等操作。

Java.util包中包含了一些在Java2中新增加的最令人興奮的增強功能:類集家肯。一個類集(collection)是一組對象龄砰。類集的增加使得許多java.util中的成員在結(jié)構(gòu)和體系結(jié)構(gòu)上發(fā)生根本的改變。它也擴展了包可以被應(yīng)用的任務(wù)范圍讨衣。Java的類集(Collection)框架使你的程序處理對象組的方法標(biāo)準(zhǔn)化换棚。在Java 2出現(xiàn)之前,Java提供了一些專門的類如Dictionary反镇,Vector固蚤,Stack和Properties去存儲和操作對象組。盡管這些類非常有用歹茶,它們卻缺少一個集中夕玩,統(tǒng)一的主題。因此例如說使用Vector的方法就會與使用Properties的方法不同辆亏。以前的專門的方法也沒有被設(shè)計成易于擴展和能適應(yīng)新的環(huán)境的形式风秤。而類集解決了這些(以及其他的一些)問題

Java類集框架的優(yōu)勢:

1) 這種框架是高性能的。對基本類集(動態(tài)數(shù)組扮叨,鏈接表缤弦,樹和散列表)的實現(xiàn)是高效率的。一般很少需要人工去對這些“數(shù)據(jù)引擎”編寫代碼(如果有的話)彻磁。

2) 框架允許不同類型的類集以相同的方式和高度互操作方式工作碍沐。

3) 類集是容易擴展和/或修改的狸捅。為了實現(xiàn)這一目標(biāo),類集框架被設(shè)計成包含一組標(biāo)準(zhǔn)的接口累提。對這些接口尘喝,提供了幾個標(biāo)準(zhǔn)的實現(xiàn)工具(例如LinkedList,HashSet和TreeSet)斋陪,通常就是這樣使用的朽褪。如果你愿意的話,也可以實現(xiàn)你自己的類集无虚。為了方便起見缔赠,創(chuàng)建用于各種特殊目的的實現(xiàn)工具。一部分工具可以使你自己的類集實現(xiàn)更加容易友题。

4) 增加了允許將標(biāo)準(zhǔn)數(shù)組融合到類集框架中的機制嗤堰。

類集的整體框架如下:


collection框架整體圖

Collection接口是構(gòu)造類集框架的基礎(chǔ)。它聲明所有類集都將擁有的核心方法度宦。因為所有類集實現(xiàn)Collection踢匣,所以熟悉它的方法對于清楚地理解框架是必要的。

boolean add(Ee):向集合中增加元素戈抄,如果該類型集合允許有重復(fù)元素(如:ArrayList离唬、LinkedList等)或者不允許有重復(fù)元素但新添加的元素不在集合中則返回true,如果該類型集合不允許有重復(fù)元素并且新添加的元素已經(jīng)在集合中則返回false呛凶。

boolean addAll(CollectionE> c):將一個類集c中的所有元素添加到另一個類集(本類集)男娄。

void clear():清除本類集中所有元素,調(diào)用完該方法后本類集將為空漾稀。

boolean contains(Object o):如果本類集包含元素e模闲,并且滿足(o==null ?e==null : o.equals(e))則返回true,否則返回false崭捍。

boolean containsAll(Collection c):如果本類集包含指定類集c中的所有元素則返回true尸折,否則返回false。

boolean equals(Objecto):如果本類集的equals方法是我們自己重寫的殷蛇,則具體兩個類集怎樣才算equal(是引用相等還是值相等且順序相同)实夹,我們自己決定。如果類集的equals方法不是我們重寫的粒梦,則當(dāng)兩個類集類型為List(包括ArrayList和LinkedList亮航,元素可以重復(fù))時,必須兩個類集的元素個數(shù)相等匀们,元素順序相同缴淋,且相同位置的元素對應(yīng)相等才返回true,否則返回false;當(dāng)兩個類集類型為Set(包括HashSet和TreeSet重抖,元素不能重復(fù))時露氮,只須兩個類集的元素個數(shù)相等,并且一個類集中的任一個元素在另一個類集中都能找到相同的元素(不必順序相同钟沛,因為Set是無序的)畔规,則返回true,否則返回false恨统。

int hashCode():返回本類集的hash code值叁扫,具體算法依賴于類集中元素的值和類型,在后面的討論中會講到畜埋。

boolean isEmpty():若本類集沒有元素則返回true陌兑,否則返回false。

Iterator iterator():返回本類集中所有元素的迭代函數(shù)由捎,至于從該函數(shù)中取出的元素的順序依賴于本類集的類型,若為List則按List的順序取出饿凛,若為Set則無序狞玛。

booleanremove(Objecto):若本類集中有值與o的值相等的元素,則刪除該元素涧窒,并返回true心肪,若沒有則返回false。當(dāng)類集類型為List時纠吴,有可能有多個元素與o的值相等硬鞍,此時,只會刪除第一個值為o的元素戴已,其他元素位置不變固该。

boolean removeAll(Collectionc):刪除本類集中與指定類集c中的元素相等的所有元素,不管有多少個元素糖儡,只要在c中出現(xiàn)了伐坏,調(diào)用后d中就不會出現(xiàn)。若調(diào)用后本類集的元素有改變(即有元素被刪除)握联,則返回true桦沉,否則返回false。

boolean retainAll(Collectionc):保持本類集中在指定類集中出現(xiàn)過的所有元素金闽,即刪除本類集中不包含在指定類集c中的所有元素纯露。若調(diào)用后本類集的元素有改變(即有元素被刪除),則返回true代芜,否則返回false埠褪。

int size():返回本類集中元素的個數(shù),但大小不能超過0x7fffffff,若超過則返回0x7fffffff组橄。

Object[] toArray():返回一個包含了本類集中所有元素的數(shù)組荞膘,數(shù)組類型為:Object[],因為底層是通過iterator()方法來傳值的玉工,所以數(shù)組中元素的順序同樣依賴于本類集的類型羽资,若為List則按List的順序放入數(shù)組,若為Set則無序遵班。

T[] toArray(T[] a):以泛型的形式來傳遞返回數(shù)組的類型屠升,其他與Object[]toArray()方法類似。

直接繼承Collection接口的有List狭郑、Queue腹暖、BeanContext和Set四個接口,其中我們用的最多的是List和Set這兩個接口翰萨,后面的博文將會詳細(xì)分析脏答;另外兩個接口用的相對較少,一般要實現(xiàn)這兩個接口的功能時都是開發(fā)者自己重新實現(xiàn)亩鬼,在此不作詳細(xì)分析殖告。

轉(zhuǎn)自?

collection框架的結(jié)構(gòu)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雳锋,隨后出現(xiàn)的幾起案子黄绩,更是在濱河造成了極大的恐慌,老刑警劉巖玷过,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爽丹,死亡現(xiàn)場離奇詭異,居然都是意外死亡辛蚊,警方通過查閱死者的電腦和手機粤蝎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嚼隘,“玉大人诽里,你說我怎么就攤上這事》捎迹” “怎么了谤狡?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長卧檐。 經(jīng)常有香客問我墓懂,道長,這世上最難降的妖魔是什么霉囚? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任捕仔,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘榜跌。我一直安慰自己闪唆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布钓葫。 她就那樣靜靜地躺著悄蕾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪础浮。 梳的紋絲不亂的頭發(fā)上帆调,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天,我揣著相機與錄音豆同,去河邊找鬼番刊。 笑死,一個胖子當(dāng)著我的面吹牛影锈,可吹牛的內(nèi)容都是我干的芹务。 我是一名探鬼主播,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼鸭廷,長吁一口氣:“原來是場噩夢啊……” “哼锄禽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起靴姿,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎磁滚,沒想到半個月后佛吓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡垂攘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年维雇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晒他。...
    茶點故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡吱型,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出陨仅,到底是詐尸還是另有隱情津滞,我是刑警寧澤,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布灼伤,位于F島的核電站触徐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏狐赡。R本人自食惡果不足惜撞鹉,卻給世界環(huán)境...
    茶點故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鸟雏,春花似錦享郊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惶室,卻和暖如春温自,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背皇钞。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工悼泌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人夹界。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓馆里,卻偏偏與公主長得像,于是被迫代替她去往敵國和親可柿。 傳聞我的和親對象是個殘疾皇子鸠踪,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,566評論 2 349

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

  • Collection ├List │├LinkedList │├ArrayList │└Vector │└Stac...
    AndyZX閱讀 870評論 0 1
  • 寫在前面自開始在公司實習(xí)以來,經(jīng)常都要用到集合框架复斥。不僅后臺要用营密,在前臺做數(shù)據(jù)交互的時候用得也多。所以我想著是時候...
    EakonZhao閱讀 3,264評論 0 12
  • Scala的集合類可以從三個維度進行切分: 可變與不可變集合(Immutable and mutable coll...
    時待吾閱讀 5,807評論 0 4
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法目锭,類相關(guān)的語法评汰,內(nèi)部類的語法,繼承相關(guān)的語法痢虹,異常的語法被去,線程的語...
    子非魚_t_閱讀 31,598評論 18 399
  • 畢業(yè)幾近半年,也有一些自己的想法奖唯。工作和沒進入工作之前惨缆,想象和現(xiàn)實接觸之后,總會有差距丰捷。 不說什么煽情的話坯墨,有些事...
    Mkii_Cheung閱讀 173評論 0 0