栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java扩展之part21 Set系列集合

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java扩展之part21 Set系列集合

Set系列集合

特点:

无序不重复,无索引

set系列实现类的特点:

HashSet:无序,不重复,无索引linkedHashSet:有序,不重复,无索引TreeSet:排序(按大小排序),不重复,无索引

哈希值:JDK根据对象的地址,按照某种规则算出来的int类型的数值

Object类的API:

public int hashCode();//返回对象的哈希值

对象哈希值的特点:

同一个对象多次调用hashCode()方法返回的哈希值是相同的默认情况下,不同对象的哈希值是不同的 set系列集合底层的数据结构

HashSet

现在哈希值跟数组的长度求余计算出应存入的位置,在JDK8之前,采用数组+链表的方式。哈希表是一种对于增删改查数据性能都较好的结构,在JDK8之后就采用数组+链表+红黑树的结构。

set集合可以去除重复的原因:先判断哈希值,在判断equals

那么如果希望set集合认为两个内容相同的对象不应该去除重复的咋办?

在实体类中,增加equals和hashCode(使用快捷键自动生成即可)。

linkedHashSet

有序,不重复,无索引

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

TreeSet

排序,不重复,无索引

基于红黑树数据结构实现排序的

注意:TreeSet集合是一定要排序的,可以将元素按照指定的规则进行排序

TreeSet的排序规则

数值:Integer,Double按大小升序排序

字符串:按首字母编号升序排序

自定义类型:需要制定排序规则

方式一:使用类自定义比较规则(在实体类中实现)

首先需要在实体类中实现自定义比较规则的接口implements Comparable,这一步不要忘记

@Override
public int compareTo(Apple o){
    
    return this.wigth-o.wigth>=0?1:-1;
}

方式二:集合自带比较器对象进行规则定制(在实现类中使用)

Set apples=new TreeSet<>(new comparator)

浮点类型建议直接使用Double.compare进行比较

Set apples=new TreeSet<>(new comparator)

使用lambda表达式书写:

Set apples=new TreeSet<>((o1,o2)->Double.compare(o2))

假设同时使用了这两种方式,则采用就近原则。

可变参数
public static void sum(int...nums){
    
}

一个形参列表中只能有一个可变参数()可变参数必须放在形参列表的最后面

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749626.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号