面向?qū)ο?集合


什么是集合
集合:就是用來存放數(shù)據(jù)的一個(gè)容器

數(shù)組的不足:
1.長(zhǎng)度是固定的,不能再去添加元素

Java提供集合類
它的長(zhǎng)度是可以改變的
能存儲(chǔ)任意的對(duì)象
長(zhǎng)度是隨著你的元素增加而增加的

數(shù)組和集合的區(qū)別?
1.數(shù)組能存基本數(shù)據(jù)類型,和引用類型
2.集合當(dāng)中只能存放引用數(shù)據(jù)類型,直接放,也會(huì)幫你自動(dòng)裝箱(把基本數(shù)據(jù)類型轉(zhuǎn)成對(duì)象)
集合當(dāng)中只能存放對(duì)象
3.數(shù)組長(zhǎng)度是固定的,不能再去增長(zhǎng)
集合長(zhǎng)度是可以改變,根據(jù)元素的增長(zhǎng)而增加

什么時(shí)候使用數(shù)組,什么時(shí)候使用集合?
1.如果元素個(gè)數(shù)是固定,推薦使用數(shù)組
2.如果元素不是固定,推薦使用集合



集合類繼承體系


Collection添加元素
1.集合當(dāng)中存的都是對(duì)象,集合可以當(dāng)成是數(shù)組,不斷往后增加元素
2.Collection是一個(gè)接口類型,需要一個(gè)實(shí)現(xiàn)類進(jìn)行創(chuàng)建繼承
3.添加基本數(shù)據(jù)類型,會(huì)幫你自動(dòng)裝箱(把基本數(shù)據(jù)類型轉(zhuǎn)成對(duì)象)
4.List當(dāng)中可以添加重復(fù)的元素,add方法添加元素,它的返回值都是true
所以在今后開發(fā)當(dāng)中,不會(huì)接收結(jié)果
因?yàn)樵趕et當(dāng)中是不能添加重復(fù)元素的,如果添加就給你一個(gè)false
5.ArrayList當(dāng)中覆蓋了toString的方法,直接可以打印結(jié)果

package 面向?qū)ο?集合;

import java.util.ArrayList;
import java.util.Collection;

class Student{
    String name;
    String age;
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + "]";
    }
    
}

public class CollectionDemo {
    
    public static void main(String[] args) {

        多態(tài)寫法,面向接口編程  運(yùn)行時(shí),表現(xiàn)出來的是子類特征
        集合當(dāng)中存的都是對(duì)象
        Collection c = new ArrayList();//可以當(dāng)成是數(shù)組,不斷往后增加元素
        boolean b1 = c.add("abc");
        boolean b2 = c.add(10);//會(huì)幫你自動(dòng)裝箱(把基本數(shù)據(jù)類型轉(zhuǎn)成對(duì)象)
        boolean b3 = c.add(true);
        //boolean b2 = c.add(Integer.valueOf(10));
        //boolean b3 = c.add(Boolean.valueOf(true));
        
        Student s = new Student();
        s.age="17";
        s.name="zs";
        boolean b4 = c.add(s);
        
        boolean b5 = c.add("abc");//List當(dāng)中可以添加重復(fù)的元素
                                  //List當(dāng)中的add返回值都是true
                                  //所以在今后開發(fā)當(dāng)中,不會(huì)接收結(jié)果
                                  //因?yàn)樵趕et當(dāng)中是不能添加重復(fù)元素的,如果添加就給你一個(gè)false
        System.out.println(b1);
        System.out.println(b2);
        System.out.println(b3);
        System.out.println(b4);
        System.out.println(b5);
        
        System.out.println(c);//[abc, 10, true, 面向?qū)ο?集合.Student@15db9742, abc]
        //ArrayList當(dāng)中覆蓋了toString的方法,直接可以打印結(jié)果
        //[abc, 10, true, Student [name=zs, age=17], abc] student類當(dāng)中覆蓋了toString的這個(gè)方法

    }

}

Collection常用方法

        @SuppressWarnings({ "rawtypes", "unchecked" })//掃黃,main方法當(dāng)中不再出現(xiàn)這些警告

Collection集合方法

    public static void main(String[] args) {

        Collection c2 = new ArrayList();
        c2.add("a");
        c2.add("b");
        c2.add("c");
        System.out.println(c2);//[a, b, c]

        可以從集合當(dāng)中移除指定的元素
        c2.remove("a");
        System.out.println(c2);//[b, c]
        
        判斷一個(gè)集合是否為空,true,false
        System.out.println(c2.isEmpty());//false

        獲取集合當(dāng)中的長(zhǎng)度(有幾個(gè)元素)    
        System.out.println(c2.size());//size:2   與數(shù)組的length一樣
        
        清空集合當(dāng)中的所有內(nèi)容
        c2.clear();
        System.out.println(c2);//[]

    }


Collection集合轉(zhuǎn)普通數(shù)組
集合的遍歷:從集合當(dāng)中一個(gè)一個(gè)取

元素

package 面向?qū)ο?集合;

import java.util.ArrayList;
import java.util.Collection;

class Dog {
    private String name;

    public String getName() {
        return name;
    }

    Dog(String name) {
        this.name = name;
    }
}

public class CollectionDemo {
    
    
    @SuppressWarnings("rawtypes")//掃黃
    public static void main(String[] args) {

        Collection c = new ArrayList();
        c.add("a");
        c.add("b");
        c.add("c");
        System.out.println(c);

遍歷數(shù)組
        先把集合轉(zhuǎn)成數(shù)組,  使用toArray() 返回Object類型
        獲取數(shù)組中的每一個(gè)元素
        Object[] arr = c.toArray();
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

        Collection c2 = new ArrayList();
        c2.add(new Dog("wc"));//添加狗對(duì)象
        c2.add(new Dog("wc2"));
        c2.add(new Dog("wc3"));

        并不能使用get方法   arr2[i].getName()
        因?yàn)閿?shù)組當(dāng)中都是Object

        Object[] arr2 = c2.toArray();
        并不能使用get方法   arr2[i].getName()
        因?yàn)閿?shù)組當(dāng)中都是Object
        自動(dòng)把數(shù)組當(dāng)中的元素向上轉(zhuǎn)型了,向根類轉(zhuǎn)型了,轉(zhuǎn)為萬物之主Object 
        Object當(dāng)中沒有辦法去調(diào)用具體類型當(dāng)中的方法
        
        for (int i = 0; i < arr2.length; i++) {
            
            Dog d = (Dog)arr2[i];    向下轉(zhuǎn)型
            System.out.println(d.getName());
        }

    }

}


Collection集合帶all常用方法
eclipse快捷鍵 Alt+Shift+R

        Collection c1 = new ArrayList();
        c1.add("a");
        c1.add("b");
        c1.add("c");
        c1.add("d");

        Collection c2 = new ArrayList();
        c2.add("a");
        c2.add("b");
        c2.add("c");
        c2.add("d");

        System.out.println(c1);[a, b, c, d]
        把c2的所有元素合并到c1當(dāng)中
        c1.addAll(c2);
        //c1.add(c2);是添加對(duì)象[a, b, c, d, [a, b, c, d]]
        System.out.println(c1);//[a, b, c, d, a, b, c, d]

        Collection c3 = new ArrayList();
        c3.add("a");
        c3.add("b");
        從c1當(dāng)中刪除兩個(gè)集合的交集removeAll
        c1.removeAll(c3);
        System.out.println(c1);//[a, b, c, d, a, b, c, d] ---->  [c, d, c, d]
        Collection c4 = new ArrayList();
        c4.add("c");
        c4.add("d");
        判斷調(diào)用的集合是否全部包含傳入的集合containsAll
        boolean res = c1.containsAll(c4);
        System.out.println(res);//true
        Collection c5 = new ArrayList();
        c5.add("c");
        c5.add("d");
        取交集 retainAll 把交集的結(jié)果賦值給調(diào)用者  , 有返回值boolean
        如果調(diào)用的集合改變了,就返回true,c1沒改變就返回false
        boolean b = c1.retainAll(c5);
        System.out.println(c1);//[c, d, c, d]
        System.out.println(b);//false   



Collection迭代器遍歷元素
迭代器(iterator)
集合當(dāng)中的元素直接放到迭代器當(dāng)中,迭代器當(dāng)中有方法直接取出元素

    @SuppressWarnings({ "unchecked", "rawtypes" })
    public static void main(String[] args) {

        Collection c = new ArrayList();
        c.add("a");
        c.add("b");
        c.add("c");

        //數(shù)組遍歷
         Object[] o = c.toArray(); 
         for (Object object : o) {
         System.out.println(object); 
         }
         

        迭代器遍歷
        Iterator it = c.iterator();// 放到Iterator內(nèi)容會(huì)自動(dòng)提升,Object

        獲取迭代器當(dāng)中的內(nèi)容
        Object obj = it.next();// 把當(dāng)前游標(biāo)的內(nèi)容取出來,當(dāng)前的游標(biāo)往后走一位
        System.out.println(obj);// a

        Object obj2 = it.next();
        System.out.println(obj2);// b

        Object obj3 = it.next();
        System.out.println(obj3);// c

        判斷迭代器當(dāng)中是否還有元素 如果有就返回true,沒有就返回false
        boolean res = it.hasNext();
        System.out.println(res);// 游標(biāo)到了盡頭沒有元素了,false

        System.out.println("-------");

        1.先判斷有沒有元素,然后再執(zhí)行下一步
        while (it.hasNext()) {
            2.如果有,取出元素
            System.out.println(it.next());//把上面的代碼注釋掉,然后會(huì)輸出 a,b,c
        }

    }

Collection迭代器遍歷自定義對(duì)象

class Cat {
    String name;

    Cat(String name) {
        this.name = name;
    }

    void show() {
        System.out.println(this.name);
    }
}

public class CollectionDemo1 {

    public static void main(String[] args) {
        
        在每一個(gè)實(shí)現(xiàn)類當(dāng)中都定義了自己的迭代方法
        Collection c2 = new ArrayList();
        c2.add(new Cat("mimi"));
        c2.add(new Cat("mm"));
        
        Iterator it2= c2.iterator();//迭代器遍歷,里面的對(duì)象都會(huì)自動(dòng)提升為Object類型
        
        while(it2.hasNext()) {
            
            Cat cat = (Cat)it2.next();//向下轉(zhuǎn)型
            cat.show(); //mimi     mm
        }
        
    }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市抠忘,隨后出現(xiàn)的幾起案子裸卫,更是在濱河造成了極大的恐慌椭蹄,老刑警劉巖倒源,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件执泰,死亡現(xiàn)場(chǎng)離奇詭異唧躲,居然都是意外死亡咙好,警方通過查閱死者的電腦和手機(jī)篡腌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勾效,“玉大人嘹悼,你說我怎么就攤上這事〔愎” “怎么了杨伙?”我有些...
    開封第一講書人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)萌腿。 經(jīng)常有香客問我限匣,道長(zhǎng),這世上最難降的妖魔是什么毁菱? 我笑而不...
    開封第一講書人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任米死,我火速辦了婚禮,結(jié)果婚禮上鼎俘,老公的妹妹穿的比我還像新娘哲身。我一直安慰自己辩涝,他們只是感情好贸伐,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著怔揩,像睡著了一般捉邢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上商膊,一...
    開封第一講書人閱讀 50,021評(píng)論 1 291
  • 那天伏伐,我揣著相機(jī)與錄音,去河邊找鬼晕拆。 笑死藐翎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吝镣,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼堤器,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了末贾?” 一聲冷哼從身側(cè)響起闸溃,我...
    開封第一講書人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拱撵,沒想到半個(gè)月后辉川,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拴测,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年乓旗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昼扛。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寸齐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出抄谐,到底是詐尸還是另有隱情渺鹦,我是刑警寧澤,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布蛹含,位于F島的核電站毅厚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏浦箱。R本人自食惡果不足惜吸耿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望酷窥。 院中可真熱鬧咽安,春花似錦、人聲如沸蓬推。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沸伏。三九已至糕珊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間毅糟,已是汗流浹背红选。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姆另,地道東北人喇肋。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓坟乾,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蝶防。 傳聞我的和親對(duì)象是個(gè)殘疾皇子糊渊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

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