set接口

目录

一、Set接口

二、HashSet

三、LinkedHashSet

四、TreeSet


一、Set接口

 Set接口时Collection的子接口,set接口没有提供额外的方法;

Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败。

Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals 方法。因此存放到Set集合中的元素一定要注意equals方法的重写。

Set的常用实现类有:HashSet、TreeSet、LinkedHashSet。

二、HashSet

HashSet是基于HashMap实现的,底层采用HashMap来保存元素(有关HasnMap的了解移步到另一篇)。因此HashSet的实现比较简单,对于HashSet的实现,基本上都是直接调用底层HashMap的相关方法来实现的,对于保存到HashSet中的对象是应该覆盖hashCode()和equal()。

实现的接口有:Serializable,Cloneable,Iterable<E>,Collection<E>, Set<E>。

HashSet是Set接口的典型实现类;按照Hash算法来存储集合中的圆度,具有很好的存取和查找性能。

HashSet集合判断两个元素是否相等的标准:通过 hashCode() 方法比较相等,并且两个对象的 equals() 方法返回值也相等。

当向HashSet集合中存入一个元素时,HashSet会先计算该对象的hashCode()值来判断对象加入的位置,如果有其他元素,则比较hashCode值,如果重复,继续调用equal()方法来比较,相同为重复,添加失败;不同则添加成功。

HashSet的特点:元素无序;线程不安全;集合元素可以有一个是null;

HashSet的底层是数组:初始容量为16,当如果使用率超过0.75,就会扩大到原来的2倍(与HashMap相同)。

三、LinkedHashSet

LinkedHashSet是HashSet的子类。

LinkedHashSet根据元素的hashCode值来决定元素的存储位置,但它同时使用链表维护元素的次序,这使得元素看起来是以插入元素保存的。

LinkedHashSet插入的性能不如HashSet,但在迭代访问Set里的全部元素时有很好的性能。

LinkedHashSet是不允许元素重复的。

LinkedHashMap是HashMap的一个子类,具有和HashMap相同的存储结构和扩容机制,在此基础上增加了head(头节点)和tail(尾节点)。

四、TreeSet

TreeSet集合内部使用TreeMap作为存储结构,所以在遍历TreeSet时,输出的元素是有序的。所以,添加的元素必须正确实现Comparable接口,如果没有实现Comparable接口,那么创建TreeSet时必须传入一个Comparator对象。

TreeSet的底层是二叉树。可以保证对象元素的唯一性。

      

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值