三、集合和泛型
第三節:集合和泛型
1.Collection接口是集合類的根接口,沒有實現類。但是Set和List繼承了Collection. Set是元素唯一,無序的集合 List是元素不唯一,排列有序的集合 2.Map是java.util包的另一個接口,和Collection接口沒有關系,相互獨立,但都屬于結合類的一部分。Map包括key-value對,key和value都是引用類型。 key不可重復,value可重復。同一個Map對象的任何兩個key通過equals方法比較結果總是返回false。 3.Iterator,所有的集合都實現了Iterator接口,用戶遍歷集合元素的接口,包含三種方法: hasNext():是否還有下一個元素; next():返回下一個元素; remove():移除當前元素 4.區別: ---|Collection: 單列集合 ---|List: 有存儲順序, 可重復 ---|ArrayList:? 數組實現, 查找快, 增刪慢由于是數組實現, 在增和刪的時候會牽扯到數組 增容, 以及拷貝元素. 所以慢。數組是可以直接按索引查找, 所以查找時較快 ---|LinkedList: 鏈表實現, 增刪快, 查找慢由于鏈表實現, 增加時只要讓前一個元素記住自 己就可以, 刪除時讓前一個元素記住后一個元素, 后一個元素記住前一個元素。 這樣的增刪效率較高但查詢時需要一個一個的遍歷, 所以效率較低 ---|Vector:? 和ArrayList原理相同, 但線程安全, 效率略低和ArrayList實現方式相同,? 但考慮了線程安全問題, 所以效率略低 ---|Set: 無存儲順序, 不可重復 ---|HashSet:線程不安全,存取速度快。底層是以哈希表實現的。 ---|TreeSet:紅-黑樹的數據結構,默認對元素進行自然排序(String)。如果在比較的時候兩個對象返回值為0,那么元素重復。 ---|LinkedHashSet:會保存插入的順序。 ---| Map: 鍵值對 ---|HashMap:底層是哈希表數據結構,線程是不同步的,可以存入null鍵,null值。要保證鍵的唯一性,需要覆蓋hashCode方法,和equals方法。 ---|LinkedHashMap:該子類基于哈希表又融入了鏈表。可以Map集合進行增刪提高效率。 ---|TreeMap:底層是二叉樹數據結構。可以對map集合中的鍵進行排序。需要使用Comparable或者Comparator 進行比較排序。return 0,來判斷鍵的唯一性。 ---|HashTable 5:Collection接口的共性方法 增加: 1:add()???將指定對象存儲到容器中 add 方法的參數類型是Object 便于接收任意對象 2:addAll() 將指定集合中的元素添加到調用該方法和集合中 刪除: 3:remove() 將指定的對象從集合中刪除 4:removeAll() 將指定集合中的元素刪除 修改 5:clear() 清空集合中的所有元素 判斷 6:isEmpty() 判斷集合是否為空 7:contains() 判斷集合何中是否包含指定對象 8:containsAll() 判斷集合中是否包含指定集合 使用equals()判斷兩個對象是否相等?? 獲取:???9:int size()????返回集合容器的大小 轉成數組10: toArray()???集合轉換數組 *************: ArrayList 和 LinkedList的存儲查找的優缺點: 1、ArrayList 是采用動態數組來存儲元素的,它允許直接用下標號來直接查找對應的元素。但是,但是插入元素要涉及數組元素移動及內存的操作。總結:查找速度快,插入操作慢。 2、LinkedList 是采用雙向鏈表實現存儲,按序號索引數據需要進行前向或后向遍歷,但是插入數據時只需要記錄本項的前后項即可,所以插入速度較快 問題:有一批數據要存儲,要求存儲這批數據不能出現重復數據,ArrayList、LinkedList都沒法滿足需求。解決辦法:使用 set集合。 迭代器遍歷集合: 迭代器遍歷注意:?
泛型
1.泛型: 就是將類型當作變量處理。規范泛型的定義一般是一個大寫的任意字母。 2.函數上的泛型定義: 當函數中使用了一個不明確的數據類型,那么在函數上就可以進行泛型的定義。 public <泛型的聲明> 返回值類型??函數名( 泛型 變量名??){ } 3.類上的泛型聲明 修飾符 class 類名<泛型>{ } 4.類型變量扮演的角色就如同一個參數,它提供編譯器進行類型檢查的條件。 5:類泛型 細節 創建對象的時候要指定泛型的具體類型 創建對象時可以不指定泛型的具體類型(和創建集合對象一眼)。默認是Object,例如我們使用集合存儲元素的時候沒有使用泛型就是那么參數的類型就是Object 類上面聲明的泛型只能應用于非靜態成員函數,如果靜態函數需要使用泛型,那么 需要在函數上獨立聲明。 如果建立對象后指定了泛型的具體類型,那么該對象操作方法時,這些方法只能操作一種數據類型。 所以既可以在類上的泛型聲明,也可以在同時在該類的方法中聲明泛型。 6.泛型上限: 表示參數化的類型可能是所指定類型,或者是其子類。 7.泛型下限:泛型下限:使用的泛型只能是本類及其父類類型上應用的時候,就必須使用泛型的 8.java中的泛型,只在編譯階段有效 泛型類型在邏輯上可看成多個不同類型,但是在幾時運行間斷都是相同基本類型。 注意事項: 細節: 細節一:?聲明好泛型類型之后,集合中只能存放特定類型元素 細節二:?泛型類型必須是引用類型 細節三:?使用泛型后取出元素不需要類型轉換.轉載于:https://www.cnblogs.com/ximei/p/9597896.html
總結
- 上一篇: 响应式布局想法和实现
- 下一篇: 你知道哪些中国的传统小吃吗?