当前位置: 首页 > article >正文

JavaSet集合

无序(指的是添加顺序和获取出的数据顺序不一致,不重复,无索引
在这里插入图片描述
既然Set没有索引,因此功能同上一篇Connection的功能,几乎没有额外的功能

HashSet的原理

为什么是无序(要构建红黑树),不重复,无索引
哈希值:int类型的随机值。每个对象都有自己的hash值
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

我们不希望哈希表挂的元素太多,那样链表查询很慢(图中左边挂)
因此当数据总数(包括挂的)超过12(16乘0.75)的时候,会发生扩容,每次扩容成原来的两倍,并重新把元素放到新的(32长度)中。
JDK8开始,当链表长度超过8,且底层数组长度大于等于64,自动将链表转成红黑树

自定义对象去重复

在这里插入图片描述

在这里插入图片描述
打印出的还是张三,并不是我们想象的无重复,去掉多余的张三和李四,这是因为他们的哈希值不一样,在建立哈希表的时候自然被散开了。
解决:在学生类中重写
1.先令哈希值相同
在这里插入图片描述
2.重写equals,以此在建立链表的时候判断出相同。
在这里插入图片描述

LinkedHashSet的原理

依然基于哈希表,数组,链表
在前面HashSet的基础上面给每个元素增加了记录前一个元素地址和后一个元素地址的指针。
因此比上面增加了有序的功能。但是同时也比较占内存。

TreeSet

在这里插入图片描述
底层基于红黑树实现排序,增删改查性能好。
TreeSet一定要排序,如果不给排序规则,它会崩掉。
在这里插入图片描述
1.对象实现Comparable
在这里插入图片描述
这种比较安全
如果不想去重,那么我们可以当相等的时候,我们可以随便认为其中的一个大,最后一行return 0写成return 1或者-1
在这里插入图片描述
也可以这样只写一行,
默认升序排列,如果想要倒序,那么return o.getAge()-this.getAge();
2.集合new的时候重写compare函数
在这里插入图片描述
注意当两种方案都使用的时候,打印优先用第二种集合的方法
Salary为小数,因此如果差为零点4,强转后为0,所以上述return那行有风险。因此我们调用
在这里插入图片描述
也可以用Lambda简化
在这里插入图片描述
理论上,
在这里插入图片描述
实际开发中,ArrayList和HashSet用的比较多


http://www.kler.cn/a/369613.html

相关文章:

  • C语言求序列的前N项和
  • DispatchingController
  • 使用pyinstaller将python代码打包为exe程序
  • outlook创建新账户时报错2603、2604的解决办法
  • Netty的简介与实战
  • Spring Boot实现的动态化酒店住宿管理系统
  • [332]基于springboot的养老院管理系统
  • 基于SpringBoot的洗浴管理系统【附源码】
  • 400行程序写一个实时操作系统(十七):调度算法的实现
  • Sqoop的安装配置及使用
  • 梧桐数据库锁处理过程
  • Cesium基础-(Entity)-(point)
  • (STM32笔记)十二、DMA的基础知识与用法
  • OBOO鸥柏丨液晶拼接大屏KVM分布式输入输出节点控制系统技术
  • C/C++每日一练:实现冒泡排序
  • Spring Boot 3项目创建与示例(Web+JPA)
  • 厨艺爱好者的在线聚集地:Spring Boot实现
  • 2022 icpc南京(I,G,A,D,M,B)
  • GATK Funcotator 详解
  • [论文阅读]Large Language Model guided Protocol Fuzzing
  • MinIO服务部署指南
  • 线程的理解及基本操作
  • 如何使用 Vite 创建一个项目(Vue 或者 React)
  • Linux常用命令 yum 命令介绍
  • Eslint检查报错-关闭vue项目中的eslint
  • 代码工艺:SQL 优化的细节