Java基礎(chǔ)--容器類

面試官:Java的容器類你有什么了解嗎?
-:額轰传,沒(méi)有用過(guò)....
面試官:你肯定用過(guò)踱阿,但你沒(méi)有注意過(guò)....
-:應(yīng)該是吧....

你知道什么是容器類嗎?Java容器可以說(shuō)是增強(qiáng)程序員編程能力的基本工具榜晦,本文將與您一起理解容器類,看完之后你也許會(huì)恍然大悟琐凭,這原來(lái)就是容器類啊芽隆,一起避免面試時(shí)的尷尬!M城E哂酢!

1.容器的用途

如果對(duì)象的數(shù)量與生命周期都是固定的愁憔,自然我們也就不需要很復(fù)雜的數(shù)據(jù)結(jié)構(gòu)腕扶。
我們可以通過(guò)創(chuàng)建引用來(lái)持有對(duì)象,如

Class clazz;

也可以通過(guò)數(shù)組來(lái)持有多個(gè)對(duì)象吨掌,如

Class[] clazs = new Class[10];

然而半抱,一般情況下,我們并不知道要?jiǎng)?chuàng)建多少對(duì)象膜宋,或者以何種方式創(chuàng)建對(duì)象窿侈。數(shù)組顯然只能創(chuàng)建固定長(zhǎng)度的對(duì)象,為了使程序變得更加靈活與高效秋茫,Java類庫(kù)提供了一套完整的容器類史简,具備完善的方法來(lái)解決上述問(wèn)題。

2.容器的類別

容器的類別

]

觀察上圖肛著,我們可以得出容器主要分為兩種類型圆兵,兩個(gè)接口Collection與Map定義了兩類不同的對(duì)象存儲(chǔ)方式。
Collection用以保存單一的元素枢贿,Map保存關(guān)聯(lián)鍵值對(duì)殉农。通過(guò)泛型來(lái)指定容器存放的數(shù)據(jù)類型。** Iterator 設(shè)計(jì)的目的是在未知容器具體的類型的情況下局荚,用來(lái)遍歷容器元素超凳。剩下的容器類型都是繼承了這兩個(gè)接口。
在實(shí)際編碼中耀态,通過(guò)
向上轉(zhuǎn)型**為接口轮傍,在其與代碼中都使用這個(gè)接口是非常普遍的使用方式。如下:

import java.util.*;

public class TestCollection {

    public static void main(String[] args){

        Collection<Integer> c = new ArrayList<Integer>();

        for(int i = 0; i < 10; i++){

            c.add(i);    

        }

        for(Integer i : c){

            System.out.print(i + ", ");

        }

    }

}

注:由于List接口的方法比Collection更為豐富茫陆,所以 實(shí)際應(yīng)用中金麸,ArrayList向上轉(zhuǎn)型為L(zhǎng)ist更為合適擎析。
剛剛接觸容器的朋友們可能會(huì)只把Collection與Map當(dāng)做接口簿盅,實(shí)際上并非如此挥下,容器中的接口其實(shí)有六個(gè)。

3. 容器中的七大接口

1.Collection接口
2.Map接口
3.Set接口
4.List接口
5.Queue接口
6.Iterator接口
7.Comparable接口

其中List, Queue和Set接口繼承了Collection接口桨醋,剩下的接口之間都是相互獨(dú)立的棚瘟,無(wú)繼承關(guān)系。List和Set接口主要是為了區(qū)分是否要包含重復(fù)元素喜最,Iterater迭代器則是為了更靈活的迭代集合偎蘸,與foreach一起使用。Comparable接口則用于比較瞬内。

4. 各類容器的功能(主要實(shí)現(xiàn)類分析)

  • .Collection接口
    • List接口(相比Collection, 添加了新的方法)

      • ArrayList
        實(shí)現(xiàn)List接口迷雪,類似于動(dòng)態(tài)數(shù)組,適用于大量隨機(jī)訪問(wèn)的情況虫蝶。但插入和刪除的代價(jià)非常高昂
      • LinkedList
        實(shí)現(xiàn)List接口章咧,類似于鏈表,也提供了優(yōu)化的順序訪問(wèn)能真。在插入和刪除方面代價(jià)低廉赁严,隨機(jī)訪問(wèn)代價(jià)較高
    • Set接口(方法與Collection完全相同)

    • HashSet
      HashSet使用了散列函數(shù)實(shí)現(xiàn),極大的提高了訪問(wèn)速度粉铐,集合中的對(duì)象是沒(méi)有順序的疼约。存入HashSet的對(duì)象必須定義hashCode()

    • TreeSet
      TreeSet使用紅黑樹來(lái)實(shí)現(xiàn)存儲(chǔ)元素, 紅黑樹的好處是可以插入之后維持集合的有序性蝙泼,從而保證在遍歷的時(shí)候程剥,按照遞增的順序獲取對(duì)象。

    • LinkedHashSet
      顧名思義踱承,LinkedHashSet使用了鏈表來(lái)保持插入順序倡缠,不過(guò)為了提高查詢效率,也使用了散列茎活。

    • Queue接口

      • LinkedList
        LinkedList實(shí)現(xiàn)了Queue接口昙沦,提供了方法支持隊(duì)列的行為,在以后的系列我們會(huì)深入講解如何用LinkedList實(shí)現(xiàn)隊(duì)列载荔。
      • PriorityQueue
        與普通隊(duì)列不同盾饮,優(yōu)先隊(duì)列每次彈出的是優(yōu)先級(jí)最高的元素±廖酰可以通過(guò)提供自己的Comparator來(lái)修改默認(rèn)的優(yōu)先級(jí)順序丘损。
  • Map接口
    • HashMap
      HashMap通過(guò)散列機(jī)制,用來(lái)快速訪問(wèn)工扎,適用于添加徘钥、刪除和定位映射關(guān)系。允許鍵對(duì)象為null肢娘,但因?yàn)殒I對(duì)象是唯一的呈础,所以只允許有一個(gè)null舆驶。
    • TreeMap
      TreeMap保持"key"處于排序狀態(tài),不允許鍵值為null而钞,訪問(wèn)速度不如HashMap
    • LinkedHashMap 沙廉。
      LinkedHashMap保持元素插入時(shí)順序,同時(shí)提供散列實(shí)現(xiàn)快速訪問(wèn) 臼节。
      關(guān)于Map的散列實(shí)現(xiàn)是非常重要的撬陵,實(shí)現(xiàn)Map的原理(關(guān)聯(lián)數(shù)組等)。
import java.util.*;

public class IntegerSet{

  private static Random rand;

   public static void main(String[] args){

     rand = new Random(47);

      Set<Integer> intset = new HashSet<Integer>();

      for(int i = 0; i < 10000; i++){

          intset.add(rand.nextInt(30));

      }

      System.out.println(intset);

  }

}

5.總結(jié)

通過(guò)本文的回顧网缝,相信讀者對(duì)容器的用途巨税,分類,以及容器的層次結(jié)構(gòu)與一些常用容器的基本功能和用法有了較為清晰地了解粉臊。然而垢夹,想要更好的使用容器類,還必須了解每種容器具體的方法维费,源碼果元,以及線程安全的實(shí)現(xiàn),但是以上這些應(yīng)對(duì)一下面試官應(yīng)該還可以吧犀盟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末而晒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子阅畴,更是在濱河造成了極大的恐慌倡怎,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贱枣,死亡現(xiàn)場(chǎng)離奇詭異监署,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)纽哥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門钠乏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人春塌,你說(shuō)我怎么就攤上這事晓避。” “怎么了只壳?”我有些...
    開(kāi)封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵俏拱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我吼句,道長(zhǎng)锅必,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任惕艳,我火速辦了婚禮搞隐,結(jié)果婚禮上分蓖,老公的妹妹穿的比我還像新娘。我一直安慰自己尔许,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布凤巨。 她就那樣靜靜地躺著俺驶,像睡著了一般节猿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上余佛,一...
    開(kāi)封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音窍荧,去河邊找鬼辉巡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蕊退,可吹牛的內(nèi)容都是我干的郊楣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瓤荔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼净蚤!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起输硝,我...
    開(kāi)封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤今瀑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后点把,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體橘荠,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年郎逃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哥童。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡褒翰,死狀恐怖如蚜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情影暴,我是刑警寧澤错邦,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站型宙,受9級(jí)特大地震影響撬呢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妆兑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一魂拦、第九天 我趴在偏房一處隱蔽的房頂上張望毛仪。 院中可真熱鬧,春花似錦芯勘、人聲如沸箱靴。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)衡怀。三九已至,卻和暖如春安疗,著一層夾襖步出監(jiān)牢的瞬間抛杨,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工荐类, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怖现,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓玉罐,卻偏偏與公主長(zhǎng)得像屈嗤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吊输,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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

  • 集合類簡(jiǎn)介 為什么出現(xiàn)集合類?面向?qū)ο笳Z(yǔ)言對(duì)事物的體現(xiàn)都是以對(duì)象的形式癣蟋,所以為了方便對(duì)多個(gè)對(duì)象的操作透硝,就要對(duì)對(duì)象進(jìn)...
    阿敏其人閱讀 1,417評(píng)論 0 7
  • 本篇文章帶你從Java源碼深入解析關(guān)于Java容器的概念幔欧。 參考文獻(xiàn): Java容器相關(guān)知識(shí)全面總結(jié) Java官方...
    Tsy遠(yuǎn)閱讀 19,773評(píng)論 13 142
  • 從三月份找實(shí)習(xí)到現(xiàn)在罪治,面了一些公司,掛了不少礁蔗,但最終還是拿到小米觉义、百度、阿里浴井、京東晒骇、新浪、CVTE、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,243評(píng)論 11 349
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法洪囤,類相關(guān)的語(yǔ)法徒坡,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法瘤缩,異常的語(yǔ)法喇完,線程的語(yǔ)...
    子非魚_t_閱讀 31,625評(píng)論 18 399
  • 3.3 集合 一方面, 面向?qū)ο笳Z(yǔ)言對(duì)事物的體現(xiàn)都是以對(duì)象的形式剥啤,為了方便對(duì)多個(gè)對(duì)象的操作锦溪,就要對(duì)對(duì)象進(jìn)行存儲(chǔ)。另...
    閆子揚(yáng)閱讀 728評(píng)論 0 1