在學習完List集合的三個子實現類後就開始學習Set集合。
Set集合和List集合的區別?
Set集合:不允許元素重複,唯一的(元素可以爲null) ,不能保證迭代的順序恆久不變(底層哈希表和hascode)無序(存儲和取出不一致)
List集合:允許元素重複,並且存儲特點:有序性(存儲和取出一致)
通過Set集合存儲字符串並遍歷,發現Set集合存儲元素的時候,可以保證元素的唯一性,原因什麼?
HashSet集合的add方法底層依賴於雙列集合HashMap,它依賴於兩個方法,HashCode()方法和equals()方法,先比較字符串的HashCode()碼值一樣,再比較equals()方法。 如果hashCode碼值一樣,還要比較內容是否相同,由於存儲String,重寫了equals()方法。
如果在開發中,元素唯一性,並且還要保證元素有序(存儲和取出一致),使用LinkedHashSet集合.
LinkedHashSet集合:
底層是一種鏈接列表和哈希表組成可以保證元素的唯一性,是由哈希表決定的(hashCode()和equals())
可以保證元素的迭代順序一致(有序),存儲和取出一致,是由鏈表決定
TreeSet集合:
自然排序:自定義的類實現Compareable接口,然後創建TreeSet對象,通過無參構造形式創建對象
比較器排序 :public TreeSet(Comparator<E> comparator)
兩種方式:1)自定義一個類,該類實現Comparator接口,重寫Comparator接口中的compare()方法
2)直接使用接口匿名內部類的方式實現
TreeSet集合保證元素唯一,是看返回值是否爲0