JAVA 数据类型 Set HashSet LinkedHashSet TreeSet

1 HashSet

1.1 基本特性

HashSet利用hashcode进行查询,可以在 O ( 1 ) O(1) O(1)时间内完成查询。同时其中元素并没有顺序,其中的元素不可以重复。

通过hashCode和equals方法来保证元素的唯一性。根据存储的元素计算出hashCode值,然后根据计算得出的hashCode值和数组的长度进行计算出存储的下标;如果下标的位置无元素,那么直接存储;如果有元素,那么使用要存入的元素和该元素进行equals方法,如果结果为真,则已经有相同的元素了,所以直接不存;如果结果假,那么进行存储,以链表的形式存储。

所以在向HashSet集合中存储自定义对象时,为了保证set集合的唯一性,那么必须重写hashCode和equals方法。

1.2 Constructor

HashSetconstructtor
HashSet可以用Collection object创建。Collection是一个顶级接口,继承它的类有两大类:List和Set。具体细节可以参考下面的文章Collection详解

Ex:

        List<String> list = new LinkedList<>();
        list.add("jfbhj");
        list.add("nvcu");
        HashSet<String> strSet = new HashSet<>(list);

1.3 Methods

methods
add(E e): 向set中插入一个元素,如果这个元素之前不存在,直接插入,return false;如果这个元素之前存在,不进行任何操作直接return true
remove(Object o): 从set中删除一个元素,如果这个元素存在,直接删除,return true;如果这个元素不存在,不进行任何操作直接return false
iterator(): 返回一个iterator用来遍历set中的元素,用foreach也可以遍历元素

        HashSet<Integer> set = new HashSet<>();
        set.add(3);
        set.add(5);
        Iterator iter = set.iterator();
        while (iter.hasNext()) {
            System.out.println(iter.next());
        }
        
        for (Integer tmp : set) {
            System.out.println(tmp);
        }

2 LinkedHashSet

和HashSet基本一致,区别在于LinkedHashSet是存取有序的,遍历元素取出来的顺序和插入的顺序是相同的。
向LinkedHashSet集合中存储自定义对象时,为了保证set集合的唯一性,那么必须重写hashCode和equals方法。

2.1 Constructor

constructor

2.2 Methods

methods

3 TreeSet

存取无序,元素唯一,元素添加进去时,自动进行排序。
TreeSet是基于Binary Tree的数据结构,

3.1 constructor

constructor

3.2 methods

methods
TreeSet保证元素的唯一性有两种方式:
1、自定义对象实现Comparable接口,重写comparaTo方法,该方法返回0表示相等,小于0表示准备存入的元素比被比较的元素小,否则大于0;
2、在创建TreeSet的时候向构造器中传入比较器Comparator接口实现类对象,实现Comparator接口重写compara方法。
如果向TreeSet存入自定义对象时,自定义类没有实现Comparable接口,或者没有传入Comparator比较器时,会出现ClassCastException异常

4 总结

这三种 set都属于 顶级接口Collection下面的Set,与set并列的是List

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值