Java 集合8 List 的子接口 Set

在List 集合允许元素的重复,而在List 集合中去重复,是一个比较复杂的操作。因此,如果要求集合中的元素唯一,可以直接考虑 Set 接口
Set
一个无序的不包含重复元素的集合,更正式地,集合不包含一对元素e1和e2 ,使得e1.equals(e2) ,并且最多一个空元素。继承了Collection 的所有方法,同时没有定义自己的特殊方法。则取出元素的方法只有一种,使用迭代器。

Set srt = new HashSet();//Set 也是接口,通过实现类创建集合实例

创建和获取:

package Collection;
import java.util.*;
/*
接口Set  也是Collection 的一个子接口
是一个无序,不包含重复元素的集合
 */
public class SetDemo {
    public static void main(String[] args){
        //1.创建集合——通过实现类
        Set set = new HashSet();
        //2.添加元素
        set.add("itcast1");
        set.add("xixi");
        set.add("haha");
        set.add("wowo");
        //Set  只能通过迭代器获取元素
        for(Iterator it= set.iterator();it.hasNext();){
            System.out.println(it.next());
        }
    }
}

运行结果:
haha
itcast1
wowo
xixi
结果不保证有序性(可能有序也可能无序),和List 不一样,List 的迭代器获取输出是有序的(输出和输入一致)

体现Set 的惟一性:添加重复的元素:

set.add("itcast1");
        set.add("xixi");
        set.add("xixi");
        set.add("wowo");

运行结果:
itcast1
wowo
xixi
会自动删除重复性,保证集合中的元素唯一
但是如果是自定义的对象,例如 存储了自定义的学生对象(equals 已经被覆盖)
代码:

set.add(new Student("Lisi",20));
        set.add(new Student("Zhangshan",25));
        set.add(new Student("Lisi",20));
        set.add(new Student("Wangwu",18));

运行结果:
Lisi 20
Wangwu 18
Zhangshan 25
Lisi 20
保证唯一性失败,为什么呢?这个就要探讨Set 实现类的数据结构。


Set 的常用实现类 :hashSet TreeSet
此类实现Set接口,由哈希表(实际为HashMap实例)支持,不保证迭代的顺序性。

猜你喜欢

转载自blog.csdn.net/Stitch__/article/details/82380267