1. 程式人生 > >Collection集合體系、迭代器、增強for、泛型

Collection集合體系、迭代器、增強for、泛型

java.util.Collection 集合層次的根介面
    1,ArrayList implements List
       List extends Collection
    2,LinkedList implements List
       List extends Collection
    3,HashSet implements Set
       Set extends Collection
    4,LinkHashSet implements Set
       Set extends Collection

常用方法
    boolean add(E e) 新增元素
    void clear() 清空元素
    boolean contains(Object o) 判斷是否包含指定元素
    boolean remove(Object o) 刪除指定元素
    int size() 獲取長度
    Object[] toArray() 將集合轉換為陣列
Collection的方法
    Iterator<E> iterator() 獲取集合物件專屬的迭代器<while方法>
      此方法是一個抽象方法 ,任何的Collection介面的實現類,都會重寫此方法
      該方法的返回值型別是一個介面,子類重寫必定返回Iterator介面的實現類物件
      呼叫此方法 返回的就是Iterator的實現類物件
Iterator介面
    boolean hasNext() 判斷是否有元素 只要不把元素獲取完 一直都是true
      E next() 獲取元素 呼叫一次就獲取一個
      易出現

併發修改異常
        java.util.ConcurrentModificationException
    當迭代器迭代集合時,集合修改了長度 這時拋此異常

    JDK1.5後出現
      增強for迴圈
      作用:遍歷陣列或集合
      格式
      for(集合或資料儲存元素的資料型別 變數名: 要遍歷的集合或陣列){
      }

泛型介面
      泛型類
      建立物件時確定泛型的資料型別<在建立物件的時候就會例項化泛型>

泛型方法
      修飾符 <接收資料型別的變數名> 返回值型別 方法名(引數){
      }
      eg:public static<T> void show(ArrayList<T> list){
        for(T i:list){
              System.out.println(i);
            }
      }

泛型集合方法(引數為集合型別的泛型)
    呼叫方法時確定泛型的資料型別

    public interface 介面名<接收資料型別的變數>
      1.定義實現類時,就確定下來泛型的資料型別
      2.定義實現類時,不確定泛型的資料型別,建立實現類物件時,確定泛型的資料型別
    泛型的介面類
      public interface Fly<E>{

      public abstract void method(E e);
      }
    定義實現類時,就確定下來泛型的資料型別
      public class Bird implements Fly<String>{
        @Override
        public void method(String e) {
        }
      }
    使用泛型的好處
      1.將執行時的錯誤提前到編譯時
      2.避免了強制型別轉換
泛型的萬用字元 ?

泛型的限定
    上限限定 ? extends Animal 只能傳Animal及其子類
    下限限定 ? super Animal 只能傳 Animal及父類
    public class Demo01 {

    public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();
    ArrayList<Integer> list2 = new ArrayList<Integer>();
    show(list);
    show(list2);
    }
    一個方法可以遍歷這兩個集合
    public static void show(ArrayList<?> list){
    for(Object obj : list){
      System.out.println(obj);
      }
      }
  }