set接口

Set接口

特点:无序、不允许重复,是Collection接口的子接口

没有定义新方法,所有的方法都是Collection接口中所定义的方法

实现类

HashSet存储采用哈希表的方式进行存储,HashSet采用HashCode算法来存取集合中的元素,因此具有比较好的读取和查找性能

LinkedHashSet是在HashSet的基础上添加一个额外的链表结构可以记录存储数据的顺序

TreeSet采用的是树状结构进行数据存储

HashSet

类定义
在这里插入图片描述
底层实现方法:存储到Set中的所有数据最终都存储在一个HashMap中,其中存储的数据采用key的方式进行存储,值为PRESENT常量

常用算法

boolean add(E e)向集合Set中添加元素,注意不保证顺序

HashSet的特征

无序:不仅不能保证元素插入的顺序(如果需要顺序则可以使用LinkedHashSet),而且在元素在以后的顺序中也可能变化(这是由HashSet按HashCode存储对象(元素)决定的,对象变化则可能导致HashCode变化)

如果需要访问的顺序和插入的顺序一致,可以使用HashSet的子类LinkedHashSet

不允许重复 [equals和hashcode]

结论:当HashSet判定对象重复时,首先调用的是对象的hashCode方法,如果两个对象的hashCode值相同时,才调用equals进行判定。如果hashCode值不相等则不会调用equals判断。如果 hashcode相等而且equals为true,则后盖前

HashSet是线程非安全的,方法上没有同步约束

HashSet元素值可以为NULL

LinkedHashSet

类定义
在这里插入图片描述

没有什么新方法,仅仅只是在HashSet的基础上添加了一个链表结构记录存取的顺序LinkedHashSet是HashSet的一个子类,LinkedHashSet也根据HashCode的值来决定元素的存储位置,但同时它还用一个链表来维护元素的插入顺序,插入的时候即要计算hashCode又要维护链表,而遍历的时候只需要按链表来访问元素

TreeSet

TreeSet实现了SortedSet接口,顾名思义这是一种排序的Set集合
在这里插入图片描述

数据存储采用的是
在这里插入图片描述
在map中以key为需要存放的数据,以PERSENT常量为值存放数据

内部实现

底层是用TreeMap实现的,本质上是一个红黑树原理。正因为它是排序了的,所以相对HashSet来说,TreeSet提供了一些额外的按排序位置访问元素的方法,例如first(), last(), lower(), higher(), subSet(), headSet(), tailSet()

基本用法``


    Set<Integer> set = new TreeSet<Integer>();
    Random r = new Random();
    for (int i = 0; i < 10; i++)
    	set.add(r.nextInt(100));
    set.forEach(System.out::println);

TreeSet的排序分两种类型,一种是自然排序,另一种是定制排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值