Set系列集合

Set系列集合

  • 无序:存取顺序不一样

  • 不重复:可以去除重复的

  • 无索引:没有带索引的方法,所以不能使用普遍for循环遍历,不能用索引获取元素

set集合的实现类

  • HashSet:无序 不重复 无索引

  • LinkedHashSet:有序 不重复 无索引

  • TreeSet:可排序 不重复 无索引

Set接口中的方法上基本与Collction的API一致

哈希值

  • 根据hashCode方法算出来的int类型的整数

  • 该方法定义在Object类中,所有对象都可以调用,默认用地址值计算

  • 一般情况下,会重写hashCode方法,利用对象内部的属性值计算哈希值

对象哈希值的特点
  1. 如果没有重写hashCode方法,,不同的对象计算出的哈希值是不同的

  2. 如果已经重写hashCode方法,不同的对象只要属性值相同,计算出的哈希值就一样的

  3. 在小部分情况下,不同的属性值或不同的地址值计算出来的哈希值也就有可能一样(哈希碰撞)

HashSet底层原理

  1. 创建一个默认长度为16,默认加载因子0.75的数组,数组名table

  2. 根据元素的哈希值跟数组的长度计算出应存入的位置

  3. 判断当前位置是否为null,如果是null直接存入

  4. 如果位置不为null,表示有元素,则调用equals方法比较属性值

  5. 一样:不存 不一样:存入数组,形成链表

LinkedHashSet底层原理

有序 不重复 无索引

有序:保证存储和取出的元素顺序一致

原理:底层数据结构依然是哈希表,只是每个元素有额外的多了一个双链表的机制记录存储的顺序

TreeSet

对数值类型,默认按从小到大的顺序排序

对字符 字符串类型,按照字符在ASCII码表中的数字进行排序

特点:可排序 不重复 无索引,底层基于红黑树实现排序,增删改查性能良好
TreeSet的排序规则
  1. Javabean实现compavable接口,指定比较规则

  2. 创建集合时,自定义comparator比较器对象,指定比较规则

默认第一种 当第一种不满足时用第二种

方法返回值的特点

负数:表示当前要添加的元素是小的存左边

正数:表示当前要添加的元素是大的村右边

0:表示当前要添加的元素已存在 舍弃

注意

1.如果想要集合中的元素可重复

用ArrayList集合

2.如果想要集合中的元素可重复,且增删操作明显多于查询

用LinkedList集合,基于链表的

3.如果相对集合中的元素去重

用HashSet集合,基于哈希表的

4.如果相对集合中的元素去重,而且保证存取顺序

用LinkedHashSet集合,基于哈希表和双链表,效率低于HashSet

5.如果想对集合元素进行排序

用TreeSet集合,基于红黑树 后续也可以用List集合实现排序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值