集合 List

contains 底層是equals   比較對象是否相同必須重寫equals方法,否則比較的是地址值 
1:List的子類
 (1)List的子類特點
  ArrayList:
   底層數據結構是數組,查詢快,增刪慢
   線程不安全,效率高
  Vector:
   底層數據結構是數組,查詢快,增刪慢
   線程安全,效率低
  LinkedList:
   底層數據結構是鏈表,查詢慢,增刪快
   線程不安全,效率高
 (2)ArrayList
  A:沒有特有功能需要學習
  B:案例
   a:ArrayList存儲字符串並遍歷
   b:ArrayList存儲自定義對象並遍歷
 (3)Vector
  A:有特有功能
   a:添加
    public void addElement(E obj)  -- add()
   b:獲取
    public E elementAt(int index)  -- get()
    public Enumeration<E> elements() --  iterator()
  B:案例
   a:Vector存儲字符串並遍歷
   b:Vector存儲自定義對象並遍歷
 (4)LinkedList
  A:有特有功能 
   a:添加
    addFirst()
    addLast()
   b:刪除
    removeFirst()
    removeLast()
   c:獲取
    getFirst()
    getLast()
  B:案例
   a:LinkedList存儲字符串並遍歷
   b:LinkedList存儲自定義對象並遍歷
 (5)案例:
  A:去除集合中的多個字符串的重複元素
   如果字符串的內容相同,即爲重複元素
  B:去除集合中的多個自定義對象的重複元素
   如果自定義對象的成員變量值都相同,即爲重複元素
  C:用LinkedList模擬一個棧數據結構的集合類,並測試。
   你要定義一個集合類,只不過內部可以使用LinkedList來實現。
2:泛型
 (1)泛型概述
  是一種把明確類型的工作推遲到創建對象或者調用方法的時候纔去明確的特殊的類型。
 (2)格式:
  <數據類型>
  注意:該數據類型只能是引用類型。
 (3)好處:
  A:把運行時期的問題提前到了編譯期間
  B:避免了強制類型轉換
  C:優化了程序設計,解決了黃色警告線問題,讓程序更安全
 (4)泛型的前世今生
  A:泛型的由來
   Object類型作爲任意類型的時候,在向下轉型的時候,會隱含一個轉型問題
  B:泛型類
  C:泛型方法
  D:泛型接口
  E:泛型高級通配符
   ?
   ? extends E
   ? super E
 (5)我們在哪裏使用呢?
  一般是在集合中使用。
 
3:增強for循環(掌握)
 (1)是for循環的一種
 (2)格式:
  for(元素的數據類型 變量名 : 數組或者Collection集合的對象) {
   使用該變量即可,該變量其實就是數組或者集合中的元素。
  }
 (3)好處:
  簡化了數組和集合的遍歷
 (4)弊端
  增強for循環的目標不能爲null。建議在使用前,先判斷是否爲null。
  
4:靜態導入
 (1)可以導入到方法級別的導入
 (2)格式:
  import static 包名....類名.方法名;
 (3)注意事項:
  A:方法必須是靜態的
  B:如果多個類下有同名的方法,就不好區分了,還得加上前綴。
   所以一般我們並不使用靜態導入,但是一定要能夠看懂。
 
5:可變參數
 (1)如果我們在寫方法的時候,參數個數不明確,就應該定義可變參數。
 (2)格式:
  修飾符 返回值類型 方法名(數據類型... 變量) {}
  
  注意:
   A:該變量其實是一個數組名
   B:如果一個方法有多個參數,並且有可變參數,可變參數必須在最後
 (3)Arrays工具類的一個方法
  asList()把數組轉成集合。
  注意:這個集合的長度不能改變。
6:練習(掌握)
 A:集合的嵌套遍歷
 B:產生10個1-20之間的隨機數,要求隨機數不能重複
 C:鍵盤錄入多個數據,以0結束,並在控制檯輸出最大值
 
7:要掌握的代碼
 集合存儲元素,加入泛型,並可以使用增強for遍歷。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章