Java筆記12---Set集合,HashSet,LinkedSet,TreeSet
在筆記11中主要講了List的集合下的分支Arraylist,Vector,LinkedList。今天來講另一個分支Set集合下的HashSet,LinkedSet,TreeSet. 1.Set集合 Set是一個不包含重複元素的集合,並且最多包含一個null,並且繼承了Collection集合的所有方法; Set集合下有幾個具體的實現類:HashSet,TreeSet LinkedSet; 案例1:Set集合無序(儲存和取出的順序)和元素唯一; 2.(1)HashSet 元素無序(即存取元素無序),並且元素不重複,具有唯一性; 底層資料結構是雜湊表,允許使用null元素。 雜湊表:是一個元素為連結串列的陣列,綜合了陣列與連結串列的優點。(JDK1.7之前); (2)雜湊表:是一個元素為連結串列,紅黑樹的陣列,桶結構元素滿8個,就採用紅黑樹結構儲存元素,效率更高。(JDK1.8之後) 注:雜湊表的儲存結構要掌握,掌握此結構,才能理解為什麼用雜湊表能保證元素唯一。 (3)HashSet保證元素唯一性是依靠重寫hashCode()方法和equals()方法。如果不重寫則無法保證元素的唯一性(hashCode()方法決定陣列的索引,equals判斷元素是否相同)。 就是如果雜湊值相同就呼叫equals方法比較成員變數是否相同,如果相同就不新增,如果不同就新增到集合中去。 下圖是HashSet儲存元素保證元素唯一性的圖解
比較器排序:採用有參構造:TreeSet(Comparator<? Super E>comparator); public interface Comparator介面,其中的方法有: int compare(T o1, T o2) 比較用來排序的兩個引數。需要進行重寫。 案例:比較器排序,自定義物件Student; 案例: 需求:編寫一個程式,獲取10個1至20的隨機數,要求隨機數不能重複。 並把最終的隨機數輸出到控制檯。 選HashSet 可以不重複 選TreeSet 不重複還可以排序 案例: 需求:鍵盤錄入3個學生資訊(姓名,語文成績,數學成績,英語成績),按照總分從高到低輸出到控制檯。