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