一、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){}