1. 程式人生 > 實用技巧 >2020/7/14 Java之增強for迴圈、泛型、List介面、Set介面

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不能存重複元素的原因