集合Collection學(xué)習(xí)

學(xué)習(xí)目標(biāo)

  • 能夠說出集合與數(shù)組的區(qū)別
  • Collection類及其子類
  • Iterator原理及使用
  • 什么是泛型,泛型得使用好處
  • 泛型通配符的使用

問題一 集合和數(shù)組既然都是容器,它們有啥區(qū)別呢?

  1. 數(shù)組的長度是固定的。集合的長度是可變的。
  2. 數(shù)組中存儲的是同一類型的元素,可以存儲基本數(shù)據(jù)類型值。集合存儲的都是對象。而且對象的類型可以不 一致。在開發(fā)中一般當(dāng)對象多的時候,使用集合進(jìn)行存儲。

問題二 Collection類及其子類有哪些?

image

Collection是所有單列接口得父接口,下列是Collection接口得通用方法。

public boolean add(E e) : 把給定的對象添加到當(dāng)前集合中 。 
public void clear() :清空集合中所有的元素。
public boolean remove(E e) : 把給定的對象在當(dāng)前集合中刪除。 
public boolean contains(E e) : 判斷當(dāng)前集合中是否包含給定的對象。
public boolean isEmpty() : 判斷當(dāng)前集合是否為空。 - public int size() : 返回集合中元素的個數(shù)。 
public Object[] toArray() : 把集合中的元素,存儲到數(shù)組中。

問題三 Iterator原理及使用

Collection 接口與 Map 接口主要用于存儲元素,而 Iterator 主要用于迭代訪問(即遍歷) Collection 中的元 素,因此 Iterator 對象也被稱為迭代器。

即Collection集合元素的通用獲取方式。在取元素之前先要判斷集合中有沒有元素,如果有,就把這個 元素取出來,繼續(xù)在判斷,如果還有就再取出出來。一直把集合中的所有元素全部取出。這種取出方式專業(yè) 術(shù)語稱為迭代。

  public static void main(String[] args) {
        // 使用多態(tài)方式 創(chuàng)建對象
        Collection<String> coll = new ArrayList<String>();
        // 添加元素到集合
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        //遍歷 //使用迭代器 遍歷 每個集合對象都有自己的迭代器
        Iterator<String> it = coll.iterator();
        // 泛型指的是 迭代出 元素的數(shù)據(jù)類型
        while (it.hasNext()) { //判斷是否有迭代元素
            String s = it.next();//獲取迭代出的元素
            System.out.println(s);
        }
    }

問題四 什么是泛型,泛型得使用好處?

定義:在類或方法中提前聲明未知類型得對象

好處:將運(yùn)行時期的ClassCastException,轉(zhuǎn)移到了編譯時期變成了編譯失敗。避免了類型強(qiáng)轉(zhuǎn)的麻煩。

問題五 泛型通配符的使用?

當(dāng)使用泛型類或者接口時,傳遞的數(shù)據(jù)中,泛型類型不確定,可以通過通配符<?>表示。但是一旦使用泛型的通配 符后,只能使用Object類中的共性方法,集合中元素自身方法無法使用。

泛型的通配符:不知道使用什么類型來接收的時候,此時可以使用?,?表示未知通配符。 此時只能接受數(shù)據(jù),不能往該集合中存儲數(shù)據(jù)。

public class Demo1 {
    public static void main(String[] args) {
        // 使用多態(tài)方式 創(chuàng)建對象
        Collection<Integer> list1 = new ArrayList<>();
        list1.add(10);
        Collection<String> list2 = new ArrayList<>();
        list2.add("10");

    }

    public static void getElement(Collection<?> coll){}
}

通配符高級使用----受限泛型
之前設(shè)置泛型的時候,實(shí)際上是可以任意設(shè)置的,只要是類就可以設(shè)置。但是在JAVA的泛型中可以指定一個 泛型的上限和下限。

泛型的上限:
格式: 類型名稱 <? extends 類 > 對象名稱
意義:只能接收該類型及其子類

泛型得下限:
格式:類型名稱 <? super 類 > 對象名稱
意義:只能接收該類型及其父類型

public class Demo1 {
    public static void main(String[] args) {
        Collection<Integer> list1 = new ArrayList<Integer>();
        Collection<String> list2 = new ArrayList<String>();
        Collection<Number> list3 = new ArrayList<Number>();
        Collection<Object> list4 = new ArrayList<Object>();
        getElement1(list1);
        getElement1(list2);//error
        getElement1(list3);
        getElement1(list4);//error
        
        getElement2(list1);//error
        getElement2(list2);//error
        getElement2(list3);
        getElement2(list4);
    }

    // 泛型的上限:此時的泛型?,必須是Number類型或者Number類型的子類
    public static void getElement1(Collection<? extends Number> coll) {
    }

    // 泛型的下限:此時的泛型?,必須是Number類型或者Number類型的父類
    public static void getElement2(Collection<? super Number> coll) {
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容