JAVA基礎學習總結,day13(集合,泛型)

集合:

集合和數組的區別:

  1. 數組的長度是固定的,而集合的長度是可變的
  2. 數組中的元素的類型是一致的,而集合中的元素可以不一致
  3. 數組中可以存儲基本數據類型的數據,而集合只能存儲引用數據類型的數據

集合體系圖:

  • 單列集合:

    • Collection:定義了所有單列集合共有的方法
      • List:存取元素有序,可重複
        • ArrayList
        • LinkedList
        • Vector 過時不用
      • Set:存取元素無序,不可重複
        • HashSet:
        • LinkedHashSet:
        • TreeSet:
  • 雙列集合:

    • Map:
      • HashMap:
      • LinkedHashMap:
      • TreeMap:

Collection集合(接口)

  • public boolean add(E e) : 把給定的對象添加到當前集合中 。
// 創建集合對象               
// 使用多態形式          
Collection<String> coll = new ArrayList<String>();//父接口指向實現類的對象  多態           
// 使用方法          
// 添加功能  boolean  add(String s)          
coll.add("小李廣");          
coll.add("掃地僧");          
coll.add("石破天");          
System.out.println(coll);
  • public void clear() :清空集合中所有的元素。
// void  clear() 清空集合         
coll.clear();         
System.out.println("集合中內容爲:"+coll)
  • public boolean remove(E e) : 把給定的對象在當前集合中刪除。
 //boolean remove(E e) 刪除在集合中的o元素
  System.out.println("刪除石破天:"+coll.remove("石破天"));          
  System.out.println("操作之後集合中元素:"+coll);
  • public boolean contains(E e) : 判斷當前集合中是否包含給定的對象。
 // boolean contains(E e) 判斷o是否在集合中存在          
System.out.println("判斷  掃地僧 是否在集合中"+coll.contains("掃地僧"));
  • public boolean isEmpty() : 判斷當前集合是否爲空。
// boolean  isEmpty()  判斷是否爲空         
System.out.println(coll.isEmpty()); 
  • public int size() : 返回集合中元素的個數。
// size() 集合中有幾個元素     
System.out.println("集合中有"+coll.size()+"個元素")
  • public Object[] toArray() : 把集合中的元素,存儲到數組中
// Object[] toArray()轉換成一個Object數組              
Object[] objects = coll.toArray();          
// 遍歷數組          
for (int i = 0; i < objects.length; i++) {     
System.out.println(objects[i]);             
}         

Collection 集合的遍歷:
所有的Collection集合都有一個迭代器用來遍歷集合中的元素

  1. 什麼是迭代
    在取元素之前先要判斷集合中有沒有元素,如果有,就把這個元素取出來,繼續在判斷,如果還有就再取出來。一直把集合中的所有元素全部取出,這種取出方式專業術語稱爲迭代

  2. 如何獲取集合的迭代器
    Iterator iterator() 返回此集合中的元素的迭代器

  // 使用多態方式 創建對象        
Collection<String> coll = new ArrayList<String>();          
// 添加元素到集合        
coll.add("串串星人");        
coll.add("吐槽星人");        
coll.add("汪星人");                
//獲取coll集合的迭代器         
Iterator<String> it = coll.iterator();
  1. 如何使用迭代器遍歷集合中的元素 iterator中的方法:
    public E next() :返回迭代的下一個元素。
    public boolean hasNext() :如果仍有元素可以迭代,則返回 true
//使用迭代器 遍歷   每個集合對象都有自己的迭代器        
Iterator<String> it = coll.iterator();        
//  泛型指的是 迭代出 元素的數據類型        
while(it.hasNext()){ //判斷是否有迭代元素            
String s = it.next();//獲取迭代出的元素            
System.out.println(s);        
}

增強for循環:
格式:
for(元素的數據類型 變量 : Collection集合or數組){
//寫操作代碼
}

     int[] arr = {3,5,6,87};          
       //使用增強for遍歷數組
        for(int a : arr){//a代表數組中的每個元素
         System.out.println(a);
             }              
      Collection<String> coll = new ArrayList<String>();
          coll.add("小河神");
          coll.add("老河神");
          coll.add("神婆");
       for(String s :coll){
          System.out.println(s);
        }

泛型:

概述:可以在類或方法中預支地使用未知的類型(就是一個未知的數據類型)
特點:泛型只能是引用數據類型
泛型的好處:

  • 將運行時期的ClassCastException,轉移到了編譯時期變成了編譯失敗。
  • 避免了類型強轉的麻煩

注意:

  • 集合如果沒有指定元素的類型,那麼元素的類型默認是Object類型

自定義泛型和使用泛型:

  • 定義泛型類和使用泛型類:
    • 定義泛型類的語法格式:
      修飾符 class 類名<代表泛型的變量> { }
      public class 類名{
      }
      創建該泛型類對象的時候確定泛型的類型
public class MyGenericClass<MVP> { //沒有MVP類型,在這裏代表 未知的一種數據類型 未來傳遞什麼就是什麼類型     
private MVP mvp;               
public void setMVP(MVP mvp) {        
this.mvp = mvp;    
}          
public MVP getMVP() {        
return mvp;    
}
}

定義泛型方法和使用泛型方法

  • 定義泛型方法的格式:
    修飾符 <代表泛型的變量> 返回值類型 方法名(參數){ }
    調用泛型方法的時候確定泛型的類型
public class MyGenericMethod {          
public <MVP> void show(MVP mvp) {     
System.out.println(mvp.getClass());         
}         
public <MVP> MVP show2(MVP mvp) {        
return mvp;         
}
}

定義泛型接口和使用泛型接口

  • 定義泛型接口的格式:
    修飾符 interface接口名<代表泛型的變量> { }
    public interface 接口名{ }
    1. 定義實現類的時候確定泛型的類型
    2. 始終不確定泛型的類型,直到創建對象時,確定泛型的類型
public interface MyGenericInterface<E>{
public abstract void add(E e);          
public abstract E getE();       
}

泛型通配符
泛型的通配符:不知道使用什麼類型來接收的時候,此時可以使用?,?來表示未知通配符
此時只能接受數據,不能往該集合中存儲數據

泛型的上限:
格式: 類型名稱 <? extends 類 > 對象名稱
意義: 只能接收該類型及其子類
泛型的下限:
格式: 類型名稱 <? super 類 > 對象名稱
意義: 只能接收該類型及其父類型

// 泛型的上限:此時的泛型?,必須是Number類型或者Number類型的子類
public static void getElement1(Collection<? extends Number> coll){}
// 泛型的下限:此時的泛型?,必須是Number類型或者Number類型的父類
public static void getElement2(Collection<? super Number> coll){}

注意:
泛型沒有繼承

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章