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集合实现排序

posted @   java贼溜  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示