【Java-集合】Set接口
1. 特点:存储多个任意类型的对象,无序、无下标、元素的内容不允许重复。
2. 方法:继承于父接口 Collection 中的方法。
3.实现类:HashSet
a. 自定义类型的对象存储在HashSet中,如何保证 HashSet元素内容不重复?
i. 覆盖 hashCode方法
原则:必须保证相同内容的对象返回相同的哈希码值,为了提高效率,尽可能的做到,不同内容的
对象返回不同的哈希码值
覆盖准则:通常将所有的属性拼凑为一个 int 类型的结果进行返回。
案例: public int hashCode(){
return this.name.hashCode()+this.age.hashCode(); // age 包装类型
}
ii. 覆盖 equals方法
必须保证相同内容的对象返回true -> 拒绝添加到HashSet集合中。
b. HashSet保证元素不重复执行的原理:对象往HashSet集合中存储时,当前对象调用自身hashCode()方法,获取哈希码值,从而获取对应存储下标,如果存储下标上没有存储任何元素,则当前对象直接存储,但是如果存储下标上已经有存储了其他对象,则调用equals()方法,进行比较对象的内容是否相同,equals方法的结果为true,代表相同内容的对象,则HashSet集合拒绝添加,equals方法结果为false,则代表内容不同的对象,则成功添加到HashSet集合中。
4. 遍历方式:forEach(底层原理迭代器遍历)
a. 语法:for(集合元素数据类型 变量名){
- //利用变量名对元素进行操作
- }
- b. Set集合forEach遍历原理同List
5. SortedSet:是 Set的子接口,无序、无下标、对元素内容进行排序。
a. 常用的实现类TreeSet
(1)是SortedSet的实现类,SortedSet是Set的子接口
(2)特点:存储Object对象,无序、无下标、元素不重复,可对集合元素自动接序。
(3)遍历方法方式:forEach遍历、自遍历
注意:如果自定类型的对象存储在TreeSet中,需要实现 java.lang.Comparable 接口,同时实现:
compareTo方法,方法中指定排序的规则。compareTo返回值结果如果为0,则TreeSet视为
相同内容的对象。(TreeSet去除重复内容的对象,利用compareTo返回值,结果为0,相同对
象)
6.LinkedHashSet:按照添加顺序进行集合元素存储,同时元素内容不允许重复。
遍历方法方式:forEach遍历、自遍历
注意:LinkedHashSet是 HashSet的子类,所以如果自定类型的对象存储在LinkedHashSet中,
为了保证元素内容不重复,则需要对象对应的类覆盖 hashCode方法 和 equals方法(要求
和父类HashSet一致)。