Java 集合框架

集合框架

  • 概念: 集合框架是一個(gè)用來代表和操縱集合的統(tǒng)一架構(gòu)
  • 所有的集合框架都包含如下內(nèi)容:
    • 接口:是代表集合的抽象數(shù)據(jù)類型灾馒。接口允許集合獨(dú)立操縱其代表的細(xì)節(jié)。在面向?qū)ο蟮恼Z言怒医,接口通常形成一個(gè)層次
    • 實(shí)現(xiàn)(類):是集合接口的具體實(shí)現(xiàn)压固。從本質(zhì)上講梁棠,它們是可重復(fù)使用的數(shù)據(jù)結(jié)構(gòu)。
    • 算法:是實(shí)現(xiàn)集合接口的對(duì)象里的方法執(zhí)行的一些有用的計(jì)算肥矢,例如:搜索和排序端衰。這些算法被稱為多態(tài),那是因?yàn)橄嗤姆椒梢栽谙嗨频慕涌谏嫌兄煌膶?shí)現(xiàn)甘改。
  • 集合的特點(diǎn):
    • 集合只用于存儲(chǔ)對(duì)象
    • 集合長度是可變的
    • 集合可以存儲(chǔ)不同類型的對(duì)象
集合的接口
  • Collection : Collection 是最基本的集合接口旅东,一個(gè) Collection 代表一組 Object,Java不提供直接繼承自Collection的類楼誓,只提供繼承于Collection的子接口(如List和set)玉锌。
  • List : List接口是一個(gè)有序的Collection,使用此接口能夠精確的控制每個(gè)元素插入的位置疟羹,能夠通過索引(元素在List中位置主守,類似于數(shù)組的下標(biāo))來訪問List中的元素,而且允許有相同的元素榄融。
  • Set 具有與 Collection 完全一樣的接口参淫,只是行為上不同,Set 不保存重復(fù)的元素愧杯。
  • Map 將唯一的鍵映射到值涎才。
Collection接口
  • 特點(diǎn):
    • 用來存儲(chǔ)對(duì)象的容器雖然有很多并且結(jié)構(gòu)不同,但是都具備著共性力九,可以不斷向上抽取耍铜,最終就形成集合框架,該框架的頂層之一就是Collection接口跌前。 該接口中定義了集合框架中最共性的功能棕兼。最終使用的時(shí)候,其實(shí)使用的是該框架最子類的對(duì)象抵乓。
    • Collection接口及子類一次只能存放一個(gè)元素伴挚,Collection有兩個(gè)子接口:
      • List(列表) 靶衍,Set(集)
      • List:元素存取是有序的,可存放重復(fù)元素茎芋。
      • Set:元素存取是無序的颅眶,不可以存放重復(fù)元素。
Collection接口的方法
//創(chuàng)建一個(gè)ArrayList對(duì)象
    //ArrayLIst實(shí)現(xiàn)了list接口,List接口繼承Collection接口,(多態(tài)的體現(xiàn))
    Collection coll = new ArrayList();
    coll.add("1");   //添加一個(gè)元素
    //創(chuàng)建一個(gè)新數(shù)組
    Collection newColl = new ArrayList();
    newColl.add("新數(shù)組");
    newColl.add("新數(shù)組");
    coll.addAll(newColl);   //添加新數(shù)組
    
    //是否包含某元素
    System.out.println("是否包含1 = " + coll.contains("1"));
    //是否包含一組元素
    System.out.println("是否包含一組元素 = " + coll.containsAll(newColl));
    //元素的個(gè)數(shù)
    int size = coll.size();
    System.out.println(size);
    //是否為空
    boolean isEmpty = coll.isEmpty();
    //刪除某個(gè)元素  
    coll.remove("1");
    //刪除一組元素
    //coll.removeAll(newColl);
    System.out.println(coll);
    //轉(zhuǎn)換成數(shù)組
    Object[] arr = coll.toArray();
List接口
  • List是Collection接口的子接口田弥,元素存取是有序的涛酗,可存放重復(fù)元素。
  • 常用子類
    • ArrayList : 內(nèi)部是數(shù)組數(shù)據(jù)結(jié)構(gòu)偷厦,是不同步的煤杀。查詢的速度快;
    • LinkedList : 內(nèi)部是鏈表數(shù)據(jù)結(jié)構(gòu),是不同步的沪哺。增刪速度很快;
List接口的方法

*List作為Collection的子接口,具備Collection中的方法酌儒。
由于List接口是有序的辜妓,也具有一些特有的方法 :

//list 集合比collection多一部分關(guān)于下標(biāo)的操作,
    //例如插入元素到什么位置,根據(jù)位置刪除元素
    
    List list = new ArrayList();
    //添加一個(gè)元素
    list.add("12");   
    list.add("13");
    list.add("3");
    list.add("23");
    
    //根據(jù)下標(biāo)查找元素
    Object object = list.get(1);
    //根據(jù)元素查找下標(biāo)
    int index = list.indexOf("2");
    
    //修改   1,元素的下標(biāo)  2,元素的新值;
    list.set(1, "修改的元素");
    
    //截取子串  1,開始的下標(biāo)  2,結(jié)束的下標(biāo)
    List subList =  list.subList(1, 3);
    
    //根據(jù)下標(biāo)刪除元素   參數(shù):下標(biāo)
    list.remove(1);
    //根據(jù)元素刪除元素   參數(shù):元素
    list.remove("4");
    System.out.println(list);
    //清空集合
    list.clear();
ArrayList 類
  • 概述:

    • ArrayList 是一個(gè)數(shù)組隊(duì)列,相當(dāng)于動(dòng)態(tài)數(shù)組忌怎。它繼承于AbstractList籍滴,實(shí)現(xiàn)了List,Serializable等接口榴啸。提供了相關(guān)添加孽惰、刪除、修改鸥印、遍歷等功能勋功。ArrayList中的操作不是線程安全的!建議在單線程中才使用ArrayList库说。

    ArrayList list = new ArrayList();

      list.add("1");
      list.add("2");
      list.add("3");
    
      //刪除元素
      //根據(jù)下標(biāo)刪除元素
      list.remove(1);
      //根據(jù)元素刪除元素
      list.remove("2");
      
      //更新元素
      list.set(1, "更新的元素");
      //查找元素
      Object object = list.get(1);
      
      //是否包含某元素
      boolean isContain = list.contains("3");
      
      //元素的個(gè)數(shù)
      int size = list.size();
    
LinkedList類
  • 概述
    • LinkedList 內(nèi)部是鏈表數(shù)據(jù)結(jié)構(gòu)狂鞋,允許有null(空)元素。LinkedList 查找效率低潜的。

如果刪除,添加操作比較多,就用LinkedList
如果查找,更新操作較多,就用ArrayList

  • LinkedList 常用方法
LinkedList list = new LinkedList();
        
        list.add("1");
        list.add("2");
        list.add("3");
        
        //刪除元素
        //根據(jù)下標(biāo)刪除元素
        list.remove(1);
        //根據(jù)元素刪除元素
        list.remove("2");
        
        //更新元素
        list.set(1, "更新的元素");
        //查找元素
        Object object = list.get(1);
        
        //是否包含某元素
        boolean isContain = list.contains("3");
        
        //元素的個(gè)數(shù)
        int size = list.size();
Map類
//Map (鍵值結(jié)構(gòu))
        //key/value
        HashMap map = new HashMap();
        //存值
        map.put("a", "值");
        map.put("b", "值1");
        map.put("c", "值2");
        map.put("z", "值3");
        
        //取值
        String value = (String)map.get("c");
        System.out.println("key對(duì)應(yīng)的值:" + value);
        
        //修改
        map.put("z", "修改的值");
        //如果key存在,修改,   如果key不存在,添加;
        //值是可以重復(fù)的,鍵不能重復(fù)
        
        //刪除
        map.remove("a");
        
        //遍歷map
        Set keySet = map.keySet();   //用集合接收獲取所有的鍵
        //Collection valueSet = map.values();    //獲取所有的值
        //for (類型  變量名 : 集合) {}
        for (Object object : keySet) {
            System.out.print("key = " + object);
            System.out.print(",");
            System.out.println("value = " + map.get(object));
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末骚揍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子啰挪,更是在濱河造成了極大的恐慌信不,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亡呵,死亡現(xiàn)場離奇詭異抽活,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)政己,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門酌壕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掏愁,“玉大人,你說我怎么就攤上這事卵牍」郏” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵糊昙,是天一觀的道長辛掠。 經(jīng)常有香客問我,道長释牺,這世上最難降的妖魔是什么萝衩? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮没咙,結(jié)果婚禮上猩谊,老公的妹妹穿的比我還像新娘。我一直安慰自己祭刚,他們只是感情好牌捷,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涡驮,像睡著了一般暗甥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捉捅,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天撤防,我揣著相機(jī)與錄音,去河邊找鬼棒口。 笑死寄月,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的陌凳。 我是一名探鬼主播剥懒,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼合敦!你這毒婦竟也來了初橘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤充岛,失蹤者是張志新(化名)和其女友劉穎保檐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體崔梗,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡夜只,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蒜魄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扔亥。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡场躯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出旅挤,到底是詐尸還是另有隱情踢关,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布粘茄,位于F島的核電站签舞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏柒瓣。R本人自食惡果不足惜儒搭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芙贫。 院中可真熱鬧搂鲫,春花似錦、人聲如沸磺平。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽褪秀。三九已至,卻和暖如春薛训,著一層夾襖步出監(jiān)牢的瞬間媒吗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工乙埃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留闸英,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓介袜,卻偏偏與公主長得像甫何,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子遇伞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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

  • title: java集合框架學(xué)習(xí)總結(jié) tags:集合框架 categories:總結(jié) date: 2017-03...
    行徑行閱讀 1,675評(píng)論 0 2
  • 數(shù)據(jù)結(jié)構(gòu)是以某種形式將數(shù)據(jù)組織在一起的集合辙喂,它不僅存儲(chǔ)數(shù)據(jù),還支持訪問和處理數(shù)據(jù)的操作鸠珠。Java提供了幾個(gè)能有效地...
    呂侯爺閱讀 1,942評(píng)論 0 10
  • 最近在研究java源碼巍耗,就是看一看別人寫好的東西,也不算是研究渐排。知根知底的對(duì)以后的學(xué)習(xí)會(huì)有很大的幫助炬太,我先去了解一...
    蘇州丸子閱讀 805評(píng)論 0 5
  • 此文章有點(diǎn)長,希望你能看下去驯耻。 在2016年12月17日-12月23日這七天里亲族,注定要留下點(diǎn)什么炒考。是柏林恐怖襲擊嗎...
    6號(hào)筆記閱讀 616評(píng)論 6 7
  • ——我的眼淚不是真的,就如同我的微笑霎迫。 華晨宇《微光》
    焦姨閱讀 213評(píng)論 0 1