Set(不能放重復元素) 用foreach或者迭代器進行遍歷
- HashSet(底層HashMap實現)
- 用hashcode和equals方法比較兩個對象是否相等
如果哈希值不相等,那么一定是不同對象,如果相等有可能不是同一對象,這時候還要執行equals方法,所以要想使用HashSet必須要重寫hashcode和equals方法 - hashcode()->相同的對象需要產生相同hash碼,不同的對象盡量產生不同的hash碼
- equals() ->比較兩個對象的規則(先比引用,再比類型,再比屬性),一般使用eclipse自動生成,不用自己寫。
- 自反性(自己和自己比一定為true)
- 對稱性(若a==b 為true,那么b==a為true)
- 傳遞性(若a==b 為true, b=c,那么a==c為true)
- 一致性(不管多少次執行,只返回相同的結果)
- java堆空間采用hash算法
如果兩個對象的hash碼相等(沖突),采用桶結構,先用hash碼找到地址, 然后用equals方法在桶中挨個比對。 - hash函數最有名的兩個是MD5碼和SHA1
- TreeSet(底層用排序樹實現)去重+排序
- 因為需要排序所以在使用時對象需要實現Comparable接口