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接口