Collection接口:全部單列集合最頂層接口java
List接口:單列集合中的一種數組
是有序的集合,容許儲存重複的元素,有索引,能夠使用普通for循環遍歷框架
Set接口:單列集合中的一種ide
不容許儲存重複元素,沒有索引,不能使用普通for循環遍歷this
Collection單列集合共性方法:code
boolean add(E) //增長元素 boolean contains(E) //判斷是否存在某個元素 boolean remove(E) //刪除元素 boolean isEmpty() //判斷集合是否爲空 int size() //獲取大小 Object[] toArray() //集合轉換爲數組 void clear() //清空
迭代:集合元素通用獲取方式,取出元素前先判斷集合中有沒有元素,若是有就把該元素取出來,再繼續,直到取出全部元素對象
使用Iterator接口對集合進行遍歷排序
Iterator迭代器是一個接口,沒法直接使用,須要使用Iterator接口的實現類對象索引
Collection接口中有一個方法是Iterator(),返回的是Iterator接口的實現類對象接口
使用步驟:
使用集合中Iterator()方法獲取迭代器實現類對象,使用Iterator接口接收(多態)
使用Iterator接口中的hasNext方法判斷有沒有下一個元素
使用Iterator接口中的Next方法取出集合中的下一個元素
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; //Iterator迭代器 public class IteratorDemo01 { public static void main(String[] args) { Collection<String> collection = new ArrayList<>(); collection.add("hello"); collection.add("java"); collection.add("100"); //獲取迭代器 Iterator<String> iterator = collection.iterator(); //使用Iterator接口中的hasNext方法判斷有沒有下一個元素,返回boolean值 while (iterator.hasNext()){ //使用Iterator接口中的Next方法取出集合中的下一個元素 System.out.println(iterator.next()); } } }
底層使用的也是迭代器,使用for循環的格式簡化
全部單列集合均可以使用加強for循環
加強for循環能夠用來遍歷集合和數組
for(數據類型 變量名 : 集合名){ // }
//加強for循環 for(String s : collection){ System.out.println(s); }
泛型是一種未知的數據類型,當不知道使用什麼數據類型的時候能夠使用泛型,如E
建立集合對象的時候就會肯定泛型的數據類型
ArrayList<Student> list = new ArrayList<>();
定義含有泛型的類和方法:
方法格式:修飾符 <泛型> 返回值類型 方法名(參數列表(使用泛型)){ //方法體; }
//定義含有泛型的類 public class GenericClassDemo<E> { private E name; public E getName() { return name; } public void setName(E name) { this.name = name; } //定義含有泛型的普通方法 public <E> void method1 (E e){ System.out.println(e); } //定義含有泛型的靜態方法 public static <E> void method2(E e){ System.out.println("靜態方法,輸入數據:"+e); } public static void main(String[] args) { //建立一個泛型爲Integer的對象 GenericClassDemo<Integer> list1 = new GenericClassDemo<>(); list1.setName(200); Integer name1 = list1.getName(); System.out.println(name1); list1.method1(100);//調用方法時肯定泛型 //建立一個泛型爲String的對象 GenericClassDemo<String> list2 = new GenericClassDemo<>(); list2.setName("小明"); System.out.println(list2.getName()); //調用靜態方法 GenericClassDemo.method2("200"); } }
含有泛型的接口:
//定義含有泛型的接口 public interface GenericInterface<E> { public abstract void method(E e); } //////////////////////////////////////// /* 方法一:實現類實現接口,並指定接口泛型,此時覆蓋重寫和調用方法時默認泛型爲指定類型 */ public class GenericInterfaceImpl01 implements GenericInterface<Double>{ @Override public void method(Double d) { System.out.println("方法一覆蓋重寫,輸入數據:"+d); } } /* 方法二:接口用什麼泛型,實現類就用什麼泛型,建立對象的時候肯定泛型類型 */ public class GenericInterfaceImpl02<E> implements GenericInterface<E>{ @Override public void method(E e) { System.out.println("方法二覆蓋重寫,輸入數據:"+e); } } //////////////////////////////////////// public class GenericClassMain { public static void main(String[] args) { GenericInterfaceImpl01 list3 = new GenericInterfaceImpl01(); list3.method(8.8);//泛型已經默認爲Double GenericInterfaceImpl02<String> list4 = new GenericInterfaceImpl02<>(); list4.method("garen");//建立對象的時候肯定泛型類型 } }
泛型通配符:<?> 表示,表明了任意數據類型
不能建立對象使用
只能做爲方法參數使用
import java.util.ArrayList; import java.util.Iterator; public class GenericWildcard { public static void main(String[] args) { ArrayList<String> list1 = new ArrayList<>(); list1.add("garen"); list1.add("temmo"); ArrayList<Integer> list2 = new ArrayList<>(); list2.add(100); list2.add(200); arrayPrint(list1); arrayPrint(list2); } //定義一個方法能遍歷全部類型的ArrayList集合 //此時不知道泛型類型,用泛型通配符 public static void arrayPrint(ArrayList<?> list){ Iterator<?> iterator = list.iterator();//獲取迭代器 while (iterator.hasNext()){ System.out.println(iterator.next()); } // for(Object o: list){ // System.out.println(o); // } } }