Java集合——Set接口

在这里插入图片描述

HashSet、LinkedHashSet、TreeSet三者的区别

  • HashSet:作为Set接口的主要实现类,线程不安全的,可存储null值
  • LinkedHashSet:是HashSet的子类,遍历内部数据时,可根据添加顺序显示
  • TreeSet:实现算法:红黑树,可以按照添加对象的指定属性进行排序

Set的特点——无序性、不可重复性(以HashSet为例)

  • 无序性:Set底层也是利用数组储存,添加的顺序并非根据索引来添加,而是根据哈希值进行排序
  • 不可重复性:保证添加元素按照equals()时,返回值不能为true,即相同的元素只能添加一个

Set添加元素的过程(以HashSet为例)

要求:在添加元素时,要求元素的类必须重写HashCode()和equals()方法,并且这两个方法要尽可能的保证一致性

  1. 当我们往数组中添加元素时,会根据元素的哈希值进行计算返回一个在数组中存储的位置(无序性)
  2. 当这个位置当前没有元素则直接添加,如果有元素的话,则将两个元素的哈希值进行比较
  3. 如果哈希值不一样,新的元素就和之前的元素形成一个链表的模式,JDK8中新的元素在之前的元素下面,当哈希值一样时,再将两个元素进行equals比较
  4. 如果不一样,则也是形成链表模式,反之则不允许添加(不可重复性)

LinkedHashSet的实现原理

  • 相较于HashSet,LinkedHashSet在遍历时,输出的顺序是根据添加的顺序
  • 在添加元素时,顺便添加了两个变量,用于记录前一个元素和后一个元素,相当于双向链表
  • 在频繁的使用遍历操作的集合时,LinkedHashSet效率要高于HashSet

TreeSet使用方式

  • 分为自然排序(实现Comparable接口)和定制排序(Comparator)
  • TreeSet必须存储同一类型的数据,且该类必须重写comparable方法
  • 自然排序中,TreeSet采用的时compareTo方法,而不是equals()
  • 定制排序中,TreeSet采用的时compare方法,而不是equals()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值