2020/7/14 Java之增強for迴圈、泛型、List介面、Set介面
一、增強for迴圈
增強for迴圈是JDK1.5以後出來的一個高階for迴圈,專門用來遍歷陣列和集合的。
它的內部原理其實是個Iterator迭代器,所以在遍歷的過程中,不能對集合中的元素進行增刪操作。
//格式: for(元素的資料型別變數: Collection集合or陣列){ } for (int n : arr) {//變數n代表被遍歷到的陣列元素 System.out.println(n); }
增強for迴圈和普通的for迴圈有什麼區別?
注意:新for迴圈必須有被遍歷的目標。目標只能是Collection或者是陣列。
建議:遍歷陣列時,如果僅為遍歷,可以使用增強for如果要對陣列的元素進行 操作,使用老式for迴圈可以通過角標操作。
二、泛型
定義格式:修飾符class類名<代表泛型的變數> { }
class ArrayList<E>{ public booleanadd(Ee){ } publicEget(intindex){ } }
使用格式:建立物件時,確定泛型的型別
例如,ArrayList<String> list = new ArrayList<String>();
//此時,變數E的值就是String型別 class ArrayList<String>{ public booleanadd(Stringe){ } publicStringget(intindex){ } }
泛型萬用字元:
泛型是在限定資料型別,當在集合或者其他地方使用到泛型後,那麼這時一旦明確泛型的資料型別,
那麼在使用的時候只能給其傳遞和資料型別匹配的型別,否則就會報錯。
為了解決這個"無法確定具體集合中的元素型別"問題,java中,為我們提供了泛型的萬用字元<?>。
例如:
publicstaticvoidprintCollection(Collection<?>list) { Iterator<?>it = list.iterator(); while(it.hasNext()) { System.out.println(it.next()); } }
泛型的限定:
限定泛型的上限:
格式:? extends E
?代表接收E型別或者E的子型別的元素
例如,泛型限定為:? extends Person
則?代表接收Person型別或者Person子型別的元素
限定泛型的下限:
格式:? super E
?代表接收E型別或者E的父型別的元素
例如,泛型限定為:? super Student
則?代表接收Student型別或者Student父型別的元素
三、LinkedList集合
LinkedList是List的子類,List中的方法LinkedList都是可以使用。
LinkedList集合資料儲存的結構是連結串列結構。方便元素新增、刪除的集合。
實際開發中對一個集合元素的新增與刪除經常涉及到首尾操作,而LinkedList提供了大量首尾操作的方法。
LinkedList<String> link = new LinkedList<String>(); //新增元素 link.addFirst("abc1"); link.addFirst("abc2"); link.addFirst("abc3"); //獲取元素 System.out.println(link.getFirst()); System.out.println(link.getLast()); //刪除元素 System.out.println(link.removeFirst()); System.out.println(link.removeLast()); while(!link.isEmpty()){ //判斷集合是否為空 System.out.println(link.pop()); //彈出集合中的棧頂元素 }
四、HashCode不能存重複元素的原因