JAVA進(jìn)階知識學(xué)習(xí)-day02 Collection集合&Iterator迭代器&泛型

一、Collection集合

1.1?集合:集合是java中提供的一種容器,可以用來存儲多個數(shù)據(jù)。

1.2?集合和數(shù)組的區(qū)別:?

數(shù)組的長度是固定的,集合的長度是可變的。?

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

1.3?Collection類:單列集合類的根接口,用于存儲一系列符合某種規(guī)則的元素,它有兩個重要的子接口,分別是java.util.List和java.util.Set 。其中,List 的特點(diǎn)是元素有序、元素可重復(fù)。Set 的特點(diǎn)是元素?zé)o序,而且不可重復(fù)。 List 接口的主要實(shí)現(xiàn)類有 java.util.ArrayList 和 java.util.LinkedList,Set接口的主要實(shí)現(xiàn)類有java.util.HashSet和java.util.TreeSet。

1.4 Collection類的架構(gòu)圖示:

1.5?Collection是所有單列集合的父接口,因此在Collection中定義了單列集合(List和Set)通用的一些方法,這些方法可用于操作所有的單列集合。方法如下:

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ù)組中。

1.6?使用舉例:

// 創(chuàng)建集合對象,使用多態(tài)形式?

Collection<String> coll = new ArrayList<String>();

// 使用方法,添加功能?

coll.add("小李廣");

// 判斷元素是否在集合中存在

coll.contains("掃地僧");

//刪除在集合中的元素?

coll.remove("石破天");

//集合中有幾個元素?

coll.size();

// 清空集合?

coll.clear();

//判斷是否為空

coll.isEmpty();

二、Iterator迭代器

2.1?JDK專門提供了一個接口 java.util.Iterator來遍歷集合中的所有元素。

2.2?獲取迭代器的方法:

public Iterator iterator() : 獲取集合對應(yīng)的迭代器,用來遍歷集合中的元素的。

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

2.4?常用方法:

public E next() :返回迭代的下一個元素。?

public boolean hasNext() :如果仍有元素可以迭代,則返回 true。

2.5?使用舉例:

// 使用多態(tài)方式創(chuàng)建對象?

Collection<String> coll = new ArrayList<String>();

//獲取迭代器

Iterator<String> it = coll.iterator();

//判斷是否有迭代元素

while(it.hasNext()){

?? ?String s = it.next();

?? ?//獲取迭代出的元素

?? ?System.out.println(s);

?}

2.6?增強(qiáng)for:增強(qiáng)for循環(huán)(也稱for each循環(huán))是JDK1.5以后出來的一個高級for循環(huán),專門用來遍歷數(shù)組和集合的。它的內(nèi)部原理其實(shí)是個Iterator迭代器,所以在遍歷的過程中,不能對集合中的元素進(jìn)行增刪操作。

2.7?格式:?

for(元素的數(shù)據(jù)類型 變量 : Collection集合or數(shù)組){?

?? ??? ?//寫操作代碼?

}

2.8?使用舉例1:

int[] arr = {3,5,6,87};?

//使用增強(qiáng)for遍歷數(shù)組?

for(int a : arr){

?? ??? ?//a代表數(shù)組中的每個元素?

?? ??? ?System.out.println(a);?

}

2.9?使用舉例2:

Collection<String> coll = new ArrayList<String>();?

coll.add("小河神");?

coll.add("老河神");?

coll.add("神婆");?

//使用增強(qiáng)for遍歷?

for(String s :coll){

?? ??? ?System.out.println(s);

}

三、泛型

3.1?泛型:可以在類或方法中預(yù)支地使用未知的類型。

3.2?使用泛型的好處:

1、將運(yùn)行時期的ClassCastException,轉(zhuǎn)移到了編譯時期變成了編譯失敗。?

2、避免了類型強(qiáng)轉(zhuǎn)的麻煩。

3.3?泛型的定義和使用:

3.3.1?定義和使用含有泛型的類

定義格式:修飾符 class 類名<代表泛型的變量> { }

使用舉例:class ArrayList<E>{

?? ??? ??? ??? ??? ??? ?public boolean add(E e){ }

?? ??? ??? ?? ? ? }

在創(chuàng)建對象的時候確定泛型:

ArrayList<String> list = new ArrayList<String>();

3.3.2?含有泛型的方法:

定義格式:修飾符 <代表泛型的變量> 返回值類型 方法名(參數(shù)){ }

使用舉例:public<MVP> MVP show2(MVP mvp) { return mvp; }

使用格式:調(diào)用方法時,確定泛型的類型

3.3.3?含有泛型的接口:

定義格式:修飾符 interface接口名<代表泛型的變量> { }

使用舉例:public interface MyGenericInterface<E>{ }

使用格式:

1、定義實(shí)現(xiàn)類時確定泛型的類型

2、始終不確定泛型的類型,直到創(chuàng)建對象時,確定泛型的類

3.4?泛型通配符

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

3.4.2?使用舉例:

// ?代表可以接收任意類型

public static void getElement(Collection<?> 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)容