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

Java中的Set集合

Set

不能存储重复元素,元素无序(指的是不按照添加的顺序,List集合是按照添加顺序存储的)

hashSet

注:源码底层是hashMap实现的,因为hashMap是双列的,其中键是不能重复的,而hashSet是单列集合,所以就将键单独运用,实现了我们的hashSet

add方法

:hashset中添加元素时,使用的时map中的put方法,键是元素,而值则是一个常量,是一个object对象,如下:

hashSet添加元素时,如何判断元素是否已经存在(也就是判断hashMap的键是如何判断重复的)

add添加元素时,会先根据内容对象调用hashCode()方法计算出一个hash值(int类型),用计算出的哈希值作为标准来比较元素是否重复,效率高。但是,只用hash值比较是不安全的, 因为有些元素虽然内容不同,但是它们根据hashcode方法 (元素所属的类若重写了hashcode方法,则用重写的hashcode方法,若没有则使用object类的hashcode方法) 计算出的hash值是相同的(例“通话”与“种地”),为了避免,这时会调用equals方法对每个字符进行比较,只有hash值和内容都相同时,我们才会认定这两个元素重复,这时add方法就不会将其添加进set集合中

注:元素所属的类若重写了hashcode方法,则用重写的hashcode方法,若没有则使用object类的hashcode方法,object类中的hashcode()方法计算的hash值是由内存地址决定的,比较得是地址,而不是内容,所以我们如果要用集合对某个类的实例进行存储时,我们需要重写这个类的hashcode方法,通过内容计算hash值,这样set集合添加这个类的对象时,比较的就是内容而不是像object一样比较地址了,(举例:两个对象内容都相同,要存入set集合中,按道理它们是重复的,不能两个都添加,但是由于这个类没有重写hashcode方法,导致计算出的hash值不同,set集合add时就会把两个都添加进去)

注:我们自己定义的类中,重写hashcode方法时,idea会可以自动帮我们生成方法,且都是根据内容计算hash值,十分滴好用

TreeSet

元素不重复,且可以对元素进行指定方式的排序(是有序的)

存储的对象必须要实现Comparable接口

底层存储结构是二叉树(红黑树)

存储我们自定义的类对象时,类必须要实现comparable接口,重写compareTo方法。

如果对comparable接口不了解的友友,可以看下这篇哦~
https://blog.csdn.net/weixin_52394141/article/details/128907502

遍历方式

1.增强for循环

2.迭代器

Iterator类

Set集合总结:在java中可以存储一些单列不重复的元素,且需要排序时。

http://www.lryc.cn/news/2543.html

相关文章:

  • 【RabbitMQ五】——RabbitMQ路由模式(Routing)
  • 【C语言】宏定义 结构体 枚举变量的用法
  • 锁升级之Synchronized
  • 基于nodejs+vue疫情网课管理系统
  • Zabbix 构建监控告警平台(三)
  • Linux系统之dool命令行工具的基本使用
  • LeetCode-2335-装满杯子需要的最短总时长
  • npm ERR! code ELIFECYCLE解决方案,npm犯错!myweb@1.0.0构建脚本失败。
  • 最小二乘支持向量机”在学习偏微分方程 (PDE) 解方面的应用(Matlab代码实现)
  • ISYSTEM调试实践8-winIDEA Analyzer功能1
  • 每日学术速递2.11
  • 宝塔搭建实战php开源likeadmin通用管理admin端vue3源码(二)
  • 网络基础-虚拟化工具-网桥
  • 剑指 Offer 14- II. 剪绳子 II
  • English Learning - Day55 作业打卡 2023.2.9 周四
  • pixhawk2.4.8-地面站配置-APM固件
  • golang 通道类型
  • 并发、并行、吞吐量、延迟、响应时间 含义理解
  • HTTP 和 HTTPS 的区别
  • 微搭低代码从入门到精通07-基础布局组件
  • Docker镜像的创建
  • 电子技术——MOS差分输入对
  • 树莓派 - 小记
  • 【论文解读|KDD2020】AKT. Context-Aware Attentive Knowledge Tracing
  • Geek Uninstaller:向流氓软件火力全开,超良心的软件彻底卸载工具
  • Java线程池
  • 2023-02-10 - 5 文本搜索
  • 华为OD机试 - 最近的医院(Python),简单直白
  • Leetcode.1223 掷骰子模拟
  • 数据分析到底该怎么学呢?讲真,真不难!