1. 程式人生 > >Java SE集合部分--15.Collection單列集合

Java SE集合部分--15.Collection單列集合

Java集合的分支圖:如下。標紅表示重要、其他作為了解

1、概述

集合按照其儲存結構可以分為兩大類,分別是單列集合java.util.Collection 和雙列集合java.util.Map ,今天 我們主要學習Collection 集合

從上圖可以看出:

Collection單列集合類的根介面,用於儲存一系列符合某種規則的元素,它有兩個重要的子介面,分別是:

 List 的特點是元素有序、元素可重複。List 介面的主要實現類有java.util.ArrayList 和java.util.LinkedList

Set 的特點是元素無序,而且不可重複。, Set 介面的主要實現類有java.util.HashSet 和java.util.TreeSet

2、集合與陣列的區別

1.	陣列長度固定. 不可變.
2.	集合長度可變. 可伸縮. 集合底層就是 `可變陣列`.
3.	陣列可以儲存 `基本資料型別` 和 `引用資料型別.`
4.	集合僅能儲存 `引用資料型別`, 不可以儲存基本資料型別. 
因為底層使用 Object[] 陣列儲存元素.  (Object[] elementData 元素資料)

3、Collection常用方法

方法演示:

package com.blog.test;

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

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

            //  如果程式中僅僅只想呼叫 Collection 介面中定義的方法, 應該用多型
            // 多型 : 介面型別 = 實現類物件;
            // ArrayList<String> list = new ArrayList<>();

            // 編譯器編譯時的特點 : 僅根據物件左邊接收的型別, 來尋找屬性和方法
            Collection<String> c = new ArrayList<String>();

            // 1. 新增
            c.add("大羅");
            c.add("小羅");
            c.add("卡卡");
            c.add("C羅");
            c.add("梅西");
            c.add("魯尼");

            // ["大羅",...]  說明 ArrayList 類重寫 toString() 方法.
            System.out.println(c);

            // 2. 刪除
            c.remove("大羅");        // 移除第一個出現的相同元素.

            System.out.println(c);

            // 3. isEmpty 判斷集合是否為空
            boolean result = c.isEmpty();
            System.out.println("result = " + result);

            // 4. size(); 返回集合中元素的個數
            int size = c.size();
            System.out.println("size = " + size);

            // 5. toArray 將集合轉換為陣列
            Object[] objects = c.toArray();
            for (int i = 0; i < objects.length; i++) {
                Object obj = objects[i];
                System.out.println("obj = " + obj);
            }

            // 6. clear 清空集合
            c.clear();
            System.out.println("c = " + c);  // []
        }

    }

4、集合的遍歷方式-Iterator迭代器

4.1、概述

Iterator是一個介面、用於遍歷集合中的所有元素、

迭代:即Collection集合元素的通用獲取方式。在取元素之前先要判斷集合中有沒有元素,如果有,就把這個 元素取出來,繼續在判斷,如果還有就再取出出來。一直把集合中的所有元素全部取出。

Iterator介面的黨用的方法:

public E next() :返回迭代的下一個元素。
public boolean hasNext() :如果仍有元素可以迭代,則返回 true。

迭代器原理圖:

4.2、List集合遍歷:

package com.blog.test;

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

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

        //  如果程式中僅僅只想呼叫 Collection 介面中定義的方法, 應該用多型
        // 多型 : 介面型別 = 實現類物件;
        // ArrayList<String> list = new ArrayList<>();

        // 編譯器編譯時的特點 : 僅根據物件左邊接收的型別, 來尋找屬性和方法
        Collection<String> c = new ArrayList<String>();

        // 1. 新增
        c.add("大羅");
        c.add("小羅");
        c.add("卡卡");
        c.add("C羅");
        c.add("梅西");
        c.add("魯尼");
        Iterator<String> it = c.iterator();
        while(it.hasNext()){
            String next = it.next();
            System.out.println("next = " + next);
        }
    }
}

4.3、Set集合遍歷:

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

        /*
        Set 介面定義的特點 : 無序, 不可重複.
         */

        // 1. 定義一個 `陣列列表` 集合
        Collection<String> c = new HashSet<String>();

        // 2. 新增元素
        c.add("劉德華");
        c.add("張學友");
        c.add("黎明");
        c.add("郭富城");   
        c.add("劉德華");
        c.add("張學友");
        c.add("黎明");
        c.add("郭富城");

        System.out.println(c);

        // 3. 遍歷集合: Collection介面定義的通用遍歷規則 (迭代器)
        Iterator<String> it = c.iterator();
        // 3.1 while 迴圈 + hasNext() 方法判斷是否有下一個元素
        while (it.hasNext()) {
            // 3.2 如果有, 取出下一個元素
            String next = it.next();
            System.out.println("next = " + next);
        }
    }
}

4.4、迭代器原理圖:

迭代器使用注意一 : 一個 hasNext 不要對應多個 next 方法

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

        // 1. 定義一個 `陣列列表` 集合
        Collection<String> c = new ArrayList<String>();

        // 2. 新增元素
        c.add("劉德華");
        c.add("張學友");
        c.add("黎明");
        c.add("郭富城");
        c.add("郭德綱");

        System.out.println(c);

        // 3. 迭代集合
        Iterator<String> it = c.iterator();
        // 判斷
        while (it.hasNext()) {
            // 取出
            String next = it.next();
            // 檢視
            System.out.println("it.next() = " + it.next());
        }
    }
}

迭代器使用注意二 : 迭代器迭代同時, 不要使用集合對元素進行 `增刪改` 操作

package com.blog.test;

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

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

        //  如果程式中僅僅只想呼叫 Collection 介面中定義的方法, 應該用多型
        // 多型 : 介面型別 = 實現類物件;
        // ArrayList<String> list = new ArrayList<>();

        // 編譯器編譯時的特點 : 僅根據物件左邊接收的型別, 來尋找屬性和方法
        Collection<String> c = new ArrayList<String>();

        // 1. 新增
        c.add("大羅");
        c.add("小羅");
        c.add("卡卡");
        c.add("C羅");
        c.add("梅西");
        c.add("魯尼");
        System.out.println(c);

        // 3. 迭代集合
        Iterator<String> it = c.iterator();
        // 判斷
        while (it.hasNext()) {
            // 取出
            String next = it.next();
            // 判斷當前取出的元素是否為 `C羅`
            if (next.equals("C羅")) {
                // 刪除C羅
             c.remove(next);
                //it.remove();
            }
        }
        System.out.println(c);

    }
}

5、增強for迴圈

5.1、概述

增強for迴圈(也稱for each迴圈)是JDK1.5以後出來的一個高階for迴圈,專門用來遍歷陣列和集合的。它的內部原 理其實是個Iterator迭代器,所以在遍歷的過程中,不能對集合中的元素進行增刪操作。

5.2、格式:

for(元素的資料型別 變數 : Collection集合or陣列){
//寫操作程式碼
}

遍歷陣列:

package com.blog.test;

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

public class Test {
    public static void main(String[] args) {
        int[] arr = {3,5,6,87};
        //使用增強for遍歷陣列
        for (int a : arr) {//a代表陣列中的每個元素
            System.out.println(a);
        }
        Collection<String> coll = new ArrayList<String>();
        coll.add("小天使");
        coll.add("老河神");
        coll.add("神婆");
        for (String s : coll) {
            System.out.println(s);
        }
    }
}

遍歷集合:

package com.blog.test;

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

public class Test {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<String>();
        coll.add("小天使");
        coll.add("鬼老");
        coll.add("神婆");
//使用增強for遍歷
        for(String s :coll){//接收變數s代表 代表被遍歷到的集合元素
            System.out.println(s);
        }
    }
}