Set(不能放重復元素) 用foreach或者迭代器進行遍歷
- HashSet(底層HashMap實現(xiàn))
- 用hashcode和equals方法比較兩個對象是否相等
如果哈希值不相等,那么一定是不同對象于置,如果相等有可能不是同一對象,這時候還要執(zhí)行equals方法,所以要想使用HashSet必須要重寫hashcode和equals方法 - hashcode()->相同的對象需要產(chǎn)生相同hash碼蒸矛,不同的對象盡量產(chǎn)生不同的hash碼
- equals() ->比較兩個對象的規(guī)則(先比引用绍弟,再比類型砂豌,再比屬性),一般使用eclipse自動生成煌寇,不用自己寫。
- 自反性(自己和自己比一定為true)
- 對稱性(若a==b 為true逾雄,那么b==a為true)
- 傳遞性(若a==b 為true阀溶, b=c腻脏,那么a==c為true)
- 一致性(不管多少次執(zhí)行,只返回相同的結(jié)果)
- java堆空間采用hash算法
如果兩個對象的hash碼相等(沖突)银锻,采用桶結(jié)構(gòu)永品,先用hash碼找到地址, 然后用equals方法在桶中挨個比對击纬。 - hash函數(shù)最有名的兩個是MD5碼和SHA1
- TreeSet(底層用排序樹實現(xiàn))去重+排序
- 因為需要排序所以在使用時對象需要實現(xiàn)Comparable接口