1. 程式人生 > >Java筆記12---Set集合,HashSet,LinkedSet,TreeSet

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儲存元素保證元素唯一性的圖解 在這裡插入圖片描述

(4)HashSet的構造方法: HashSet()空參構造,預設容量為16,載入因子0.75(儲存容量超過0.75自動載入)。其他構造方法參考API文件。 案例2: 儲存自定義物件,並保證元素唯一性。如果兩個物件的成員變數都相同我們認為是同一個物件。注意hashCode()方法和equals()方法的重寫。 (以後可以直接一鍵生成重寫方法Ctrl+Enter) 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述 3.LinkedHashSet類 元素有序(有序指的是儲存元素與取出元素的順序一致),且唯一,執行緒不安全,效率高。底層資料結構為連結串列和雜湊表,連結串列保證有序,雜湊表保證元素唯一。 案例3:LinkedHashSet的特點:儲存Integer型別(Integer類把hashCode()方法和equals()方法已經進行了重寫),儲存自定義型別(需要自己重寫hashCode()方法和equals()方法,用的是上面的Student類)。 在這裡插入圖片描述
在這裡插入圖片描述 4.TreeSet類 (1)TreeSet:底層資料結構為二叉樹,此集合的最大特點是能對資料元素進行排序。 (2)二叉樹: 二叉樹儲存元素的特點:第一次儲存元素時沒有樹根節點,把第一個元素存到根節點的位置,第二個元素和根節點比較,比根節點大的元素放根節點右邊,比根節點小的元素放在根節點左邊,和根節點一樣的元素不儲存(從而保證了元素的唯一性)。 二叉樹取出資料元素的順序:左中右,以根節點作為中間分界。下面是二叉樹的儲存資料的原理圖: 在這裡插入圖片描述 (3)TreeSet的排序:分為自然排序和比較器排序。 自然排序:採用空參構造:TreeSet(); 採用自然排序的前提要求:必須實現Comparable()介面[public interface Comparable],重寫此介面中的comparaTo()方法[int compareTo(T o) 比較此物件與指定物件的順序。如果該物件小於、等於或大於指定物件,則分別返回負整數、零或正整數]。根據返回的值決定放在二叉樹的位置。返回值是-1放左邊,返回值為0 不放,返回值為1放右邊。(按什麼比較元素順序 自己在重寫此方法時可自己定義,比如按年齡大小排序,按名字長短排序等等)。 案例:用自然排序儲存Integer與String型別元素; 儲存自定義物件teacher,分別按年齡大小排序,按姓名長度排序。 在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述 在這裡插入圖片描述 比較器排序:採用有參構造:TreeSet(Comparator<? Super E>comparator); public interface Comparator介面,其中的方法有: int compare(T o1, T o2) 比較用來排序的兩個引數。需要進行重寫。 案例:比較器排序,自定義物件Student; 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述 案例: 需求:編寫一個程式,獲取10個1至20的隨機數,要求隨機數不能重複。 並把最終的隨機數輸出到控制檯。 選HashSet 可以不重複 選TreeSet 不重複還可以排序 在這裡插入圖片描述 案例: 需求:鍵盤錄入3個學生資訊(姓名,語文成績,數學成績,英語成績),按照總分從高到低輸出到控制檯。 在這裡插入圖片描述 在這裡插入圖片描述