java基礎(chǔ)-集合類

Collection

集合體系結(jié)構(gòu).png

Collection 集合概述

  • 是單例集合的頂層接口,它表示一組對象,這些對象也稱為Collection的元素
  • JDK 不提供此接口的任何直接實現(xiàn),它提供更具體的子接口(如Set和List) 實現(xiàn)
    創(chuàng)建Collection 集合的對象
  • 多態(tài)的方式
  • 具體的實現(xiàn)類ArrayList
public static void main(String[] args) {
        // 創(chuàng)建Collection集合的對象
        Collection<String> c = new ArrayList<>();

        // 添加元素
        c.add("hello");
        c.add("hello");
        c.add("hello");
        System.out.println(c);
    }

Collection 集合常用方法

Collection集合常用方法.png

Collection 集合的遍歷

Iterator: 迭代器,集合的專用遍歷方式

  • Iterator<E>iterator(): 返回此集合中元素的迭代器,通過集合的Iterator()方法得到
  • 迭代器是通過集合的Iterator()方法得到的,所以我們說它是依賴于集合而存在的
    Iterator中的常用方法
  • E next(): 返回迭代中的下一個元素
  • boolean hasNext()`: 如果迭代具有更多元素,則返回 true
public static void main(String[] args) {
        // 創(chuàng)建Collection集合的對象
        Collection<String> c = new ArrayList<>();

        // 添加元素
        c.add("hello");
        c.add("world");
        c.add("java");
        Iterator<String> it = c.iterator();
//        System.out.println(it.next());
//        System.out.println(it.next());
//        System.out.println(it.next());
        // System.out.println(it.next()); // NoSuchElementException 表示被請求的元素不存在
        while(it.hasNext()){
            System.out.println(it.next());
        }

集合的使用步驟

集合的使用步驟.png

案例: Collection集合存儲學(xué)生對象并遍歷

public static void main(String[] args) {
        // 創(chuàng)建Collection集合的對象
        Collection<Student> c = new ArrayList<Student>();
        // 創(chuàng)建學(xué)生對象
        Student s1 = new Student("孫悟空",30);
        Student s2 = new Student("豬八戒",31);
        Student s3 = new Student("沙悟凈",32);
        // 把學(xué)生添加到集合
        c.add(s1);
        c.add(s2);
        c.add(s3);
        // 遍歷集合(迭代器方式)
        Iterator<Student> it = c.iterator();
        while (it.hasNext()){
            Student s = it.next();
            System.out.println(s.getName() + "," + s.getAge());
        }
    }

List集合

List集合概述

  • 有序集合(也稱為序列),用戶可以精確控制列表中每個元素的插入位置.用戶可以通過整數(shù)索引訪問元素,并搜索列表中的元素
  • 與Set 集合不同,列表通常允許重復(fù)的元素
    List集合特點
  • 有序: 存儲和取出的元素順序一致
  • 可重復(fù): 存儲的元素可以重復(fù)
public static void main(String[] args) {
        // 創(chuàng)建集合的對象
        List<String> list = new ArrayList<String>();
        // 添加元素
        list.add("hello");
        list.add("world");
        list.add("world");
        list.add("java");

        // 輸出集合對象
        System.out.println(list);
        System.out.println("--------");

        // 采用迭代器方法遍歷
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            String s = it.next();
            System.out.println(s);
        }
    }

List集合特有方法

List集合特有方法.png

案例: List集合存儲學(xué)生對象并遍歷

public static void main(String[] args) {
        // 創(chuàng)建Collection集合的對象
        List<Student> list = new ArrayList<Student>();
        // 創(chuàng)建學(xué)生對象
        Student s1 = new Student("孫悟空",30);
        Student s2 = new Student("豬八戒",31);
        Student s3 = new Student("沙悟凈",32);
        // 把學(xué)生添加到集合
        list.add(s1);
        list.add(s2);
        list.add(s3);
        // 遍歷集合(迭代器方式)
        Iterator<Student> it = list.iterator();
        while (it.hasNext()){
            Student s = it.next();
            System.out.println(s.getName() + "," + s.getAge());
        }
        System.out.println("--------");
        // for循環(huán)遍歷
        for (int i=0; i<list.size(); i++){
            Student s = list.get(i);
            System.out.println(s.getName() + "," + s.getAge());
        }
    }

并發(fā)修改異常

并發(fā)修改異常

  • ConcurrentModificationException
    產(chǎn)生原因
  • 迭代器遍歷過程中,通過集合對象修改了集合中元素的長度,造成了迭代器獲取元素中判斷預(yù)期修改值和實際修改值不一致
    解決方案
  • 用 for 循環(huán)遍歷,然后用集合對象做對應(yīng)操作即可

列表迭代器

ListIterator: 列表迭代器

  • 通過List集合的listIterator()方法得到,所以說它是List集合特有的迭代器
  • 用于允許程序員沿任一方向遍歷列表的列表迭代器,在迭代期間修改列表,并獲取列表中迭代器的當(dāng)前位置

ListIterator中的常用方法

  • E next(): 返回迭代中的下一個元素
  • boolean hasNext(): 如果迭代具有更多元素,則返回true
  • boolean hasprevious(): 如果此列表迭代器在相反方向遍歷列表時具有更多元素,則返回true
  • void add(E e): 將指定的元素插入列表
    public static void main(String[] args) {
        // 創(chuàng)建集合的對象
        List<String> list = new ArrayList<String>();
        // 添加元素
        list.add("hello");
        list.add("world");
        list.add("java");

        // 輸出集合對象
        System.out.println(list);
        System.out.println("--------");

        // 采用迭代器方法遍歷
/*        ListIterator<String> lit = list.listIterator();
        while (lit.hasNext()) {
            String s = lit.next();
            System.out.println(s);
        }
        System.out.println("------------");
        while (lit.hasPrevious()){
            String s = lit.previous();
            System.out.println(s);
        }*/
        ListIterator<String> lit = list.listIterator();
        while (lit.hasNext()){
            String s = lit.next();
            if (s.equals("world")){
                lit.add("javaee");
            }
        }
        System.out.println(list);
    }

增強for循環(huán)

增強for: 簡化數(shù)組和Collection 集合的遍歷

  • 實現(xiàn)Iterable接口的類允許其對象成為增強型for語句的目標(biāo)
  • 它是JDK5之后出現(xiàn)的,其內(nèi)部原理是一個Iterator迭代器
    增強for的格式
  • 格式:
    for(元素數(shù)據(jù)類型 變量名 : 數(shù)組或Collection集合) {
    //在此處使用變量即可,該變量就是元素
    }
  • 范例:
int[] arr = {1,2,3,4,5};
for(int i : arr) {
    System.out.println(i);
}
    public static void main(String[] args) {
        // 創(chuàng)建集合的對象
        List<String> list = new ArrayList<String>();
        // 添加元素
        list.add("hello");
        list.add("world");
        list.add("java");
        for (String s : list) {
            System.out.println(s);
        }
        System.out.println("------------");
        int[] arr = {1,2,3,4,5};
        for(int i : arr) {
            System.out.println(i);
        }
        System.out.println("------------");
        String[] strArray = {"hello","world","java"};
        for (String s1 : strArray){
            System.out.println(s1);
        }
        System.out.println("------------");
/*        // 內(nèi)部原理是一個Iterator迭代器
        for (String s : list){
            if (s.equals("world")){
                list.add("javaee"); // ConcurrentModificationException,所以是一個Iterator迭代器
            }
        }*/
    }

案例: List集合存儲學(xué)生對象用三種方式遍歷

    public static void main(String[] args) {
        // 創(chuàng)建集合的對象
        List<Student> list = new ArrayList<Student>();

        // 創(chuàng)建學(xué)生對象
        Student s1 = new Student("孫悟空",500);
        Student s2 = new Student("豬八戒",500);
        Student s3 = new Student("沙悟凈",500);

        // 把他們添加進集合
        list.add(s1);
        list.add(s2);
        list.add(s3);
        // 遍歷集合

        // 迭代器,集合特有
        Iterator<Student> it = list.iterator();
        while (it.hasNext()){
            Student s = it.next();
            System.out.println(s.getName() + "," + s.getAge());
        }
        // 普通for,帶有索引
        for (int i=0;i<list.size();i++){
            Student s = list.get(i);
            System.out.println(s.getName() + "," + s.getAge());
        }
        // 增強for,最方便的
        for (Student s : list){
            System.out.println(s.getName() + "," + s.getAge());
        }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末觅丰,一起剝皮案震驚了整個濱河市呛占,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖风科,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異如输,居然都是意外死亡之拨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門盖彭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纹烹,“玉大人,你說我怎么就攤上這事召边∑毯牵” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵隧熙,是天一觀的道長片挂。 經(jīng)常有香客問我,道長贞盯,這世上最難降的妖魔是什么音念? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮邻悬,結(jié)果婚禮上症昏,老公的妹妹穿的比我還像新娘。我一直安慰自己父丰,他們只是感情好肝谭,可當(dāng)我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蛾扇,像睡著了一般攘烛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上镀首,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天坟比,我揣著相機與錄音涮雷,去河邊找鬼息罗。 笑死啸如,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的成翩。 我是一名探鬼主播觅捆,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼麻敌!你這毒婦竟也來了栅炒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赢赊,沒想到半個月后乙漓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡释移,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年叭披,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秀鞭。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡趋观,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锋边,到底是詐尸還是另有隱情,我是刑警寧澤编曼,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布豆巨,位于F島的核電站,受9級特大地震影響掐场,放射性物質(zhì)發(fā)生泄漏往扔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一熊户、第九天 我趴在偏房一處隱蔽的房頂上張望萍膛。 院中可真熱鬧,春花似錦嚷堡、人聲如沸蝗罗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽串塑。三九已至,卻和暖如春北苟,著一層夾襖步出監(jiān)牢的瞬間桩匪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工友鼻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留傻昙,地道東北人。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓彩扔,卻偏偏與公主長得像妆档,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子借杰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,974評論 2 355

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

  • 四过吻、集合框架 1:String類:字符串(重點) (1)多個字符組成的一個序列,叫字符串。生活中很多數(shù)據(jù)的描述都采...
    佘大將軍閱讀 755評論 0 2
  • 集合類簡介 為什么出現(xiàn)集合類洋措?面向?qū)ο笳Z言對事物的體現(xiàn)都是以對象的形式,所以為了方便對多個對象的操作杰刽,就要對對象進...
    阿敏其人閱讀 1,417評論 0 7
  • 集合類框架的介紹: ![Java 集合類框架](https://upload-images.jianshu.io/...
    LynnGuo閱讀 754評論 0 1
  • 在編程中菠发,常常需要集中存放多個數(shù)據(jù)。集合類主要負責(zé)保存贺嫂、盛裝其他數(shù)據(jù)滓鸠,因此集合類也被稱為容器類。所有的集合類都位于...
    一一一二二三閱讀 408評論 0 1
  • 先試試看能不能直接把圖標(biāo)拖到桌面使用第喳,因為有些應(yīng)用是可以直接拖的糜俗,比如我安裝的grub-customizer如下,...
    流年扶蘇閱讀 383評論 0 0