单列集合(下)

Set系列
无序:存取顺序不一致
不重复:可以去除重复
无索引:没有带索引的方法,所以不能使用普通for循环遍历,也不能通过索引来获取元素

Set集合的实现类
HashSet:无序、不重复、无索引
LinkedHashSet:有序、不重复、无索引
TreeSet:可排序、不重复、无索引

HashSet
底层原理:
HashSet集合底层采取哈希表存储数据

哈希表组成:
JDK8之前:数组+链表
JDK8开始:数组+链表+红黑树

在这里插入图片描述
当链表长度大于8而且数组长度大于等于64时,数组下挂载的链表会自动变成红黑树。

LinkedList
底层依旧是哈希表,只是每个元素额外的多了一个双链表的机制记录存储的数据。

TreeSet
底层基于红黑树 可排序

这里提一下数组的工具类Arrays
Arrays.sort()底层是数组,数组的类型必须是引用数据类型,如果是基本数据类型需要转换;就以自定义对象举例子,这里不需要在自定义类里实现比较规则,而是直接在测试类里创建对象,使用Arrays.sort(new comparator)重写方法,在里面指定规则即可。

而TreeSet<自定义对象>,需要在自定义对象中实现comparable<自定义对象>接口,然后重写comparable中的接口方法compareto(),然后再里面指定比较规则,这样子在测试类使用add()添加元素,然后打印才不会报错。
在这里插入图片描述
在这里插入图片描述

HashSet()和LinkedHashSet()对于自定义对象只要重写equals方法和hashcode方法即可,

HashSet存取是无序,LinkedHashSet存取是一致的。

而TreeSet,它的排序需要指定排序规则,否则存入不了。当然对于String、Interger它这个类本身就已经实现Comparable接口和重写了compareTo方法,可以直接存入。

注意的是在类里面重写comparable接口是重写的compareTo方法,而如果在创建对象是重写compartor接口是重写的compare方法。

1、直接在创建的时候重写

在这里插入图片描述

2、在自定义对象里重写

在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值