news 2026/4/22 15:55:11

Set集合、HashSet集合的底层原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Set集合、HashSet集合的底层原理

Set集合

注意:
1、Set要用到的常用方法,基本上就是Collection提供的
2、自己几乎没有额外新增一些常用功能

packagecom.itheima.demo1hashset;importjava.util.HashSet;importjava.util.LinkedHashSet;importjava.util.Set;importjava.util.TreeSet;publicclassSetDemo1{//目标:认识set家族集合的特点publicstaticvoidmain(String[]args){//创建一个Set集合。无序无重复无索引Set<String>set=newHashSet<>();//一行经典代码set.add("hello");set.add("world");set.add("java");set.add("hello");System.out.println(set);//[world, java, hello]System.out.println("=================================");//创建一个LinkedHashSet集合。有序无重复无索引Set<String>set2=newLinkedHashSet<>();set2.add("hello");set2.add("world");set2.add("java");set2.add("hello");System.out.println(set2);//[hello, world, java]System.out.println("=================================");//创建一个TreeSet集合。排序(按照升序排序),不重复,无索引Set<Double>set3=newTreeSet<>();set3.add(1.0);set3.add(1.2);set3.add(1.5);set3.add(1.0);System.out.println(set3);//[1.0, 1.2, 1.5]}}

HashSet集合的底层原理

哈希值:Java中每个对象都有一个哈希值,是一个int类型的随机值

System.out.println(set.hashCode());//215735942System.out.println(set2.hashCode());//215735942System.out.println(set3.hashCode());//-1935147008

1、添加一个新元素后开始第一步
2、哈希值相同但存的数据不一样的新元素与旧元素形成链表
3、存入的位置是通过哈希值计算出来的
4、新家的数据可能到数组前面,后加的数据可能在数组后面
5、只要数组中16(数组长度)*0.75(默认加载因子)=12的元素被占有,就会开始扩容成原来数组长度的2倍(32)

7、红黑树中 小的元素往左边走,大的元素往右边走
8、对象没有大小时比较哈希值大小存数据
9、红黑树本质也是一个链表
10、红黑树增删改查速度都很快,但是不能重复,不能索引,比较耗费内存


小结


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/7 19:53:56

电商系统Java堆内存溢出实战:从崩溃到优化

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 模拟一个电商系统场景&#xff0c;展示如何处理高并发下的大对象缓存导致的Java堆内存溢出。包括&#xff1a;1) 重现OOM错误&#xff1b;2) 使用MAT工具分析堆转储&#xff1b;3)…

作者头像 李华
网站建设 2026/4/23 11:29:13

超越本能:新精神分析学派的理论革新与人文转向

超越本能&#xff1a;新精神分析学派的理论革新与人文转向在精神分析发展史上&#xff0c;以弗洛伊德为代表的古典精神分析学派奠定了潜意识探索的基础&#xff0c;却也因过度强调生物本能与性驱力&#xff0c;陷入 “生物决定论” 的争议。20 世纪中期&#xff0c;新精神分析学…

作者头像 李华
网站建设 2026/4/23 8:36:53

零基础教程:用AI创建你的第一个城市道路模型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个极简的城市道路生成器&#xff0c;适合新手使用。功能要求&#xff1a;1. 图形化参数设置(城市大小、道路密度等) 2. 一键生成基本路网 3. 简单编辑功能(拖拽修改) 4. 导出…

作者头像 李华
网站建设 2026/4/23 8:36:55

AI助力Docker学习:从入门到精通的智能路径

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个基于AI的Docker学习助手应用&#xff0c;能够根据用户当前的学习进度自动推荐适合的Docker命令和配置示例。应用应包含&#xff1a;1) 交互式Docker命令学习模块&#xff…

作者头像 李华
网站建设 2026/4/23 8:36:16

3分钟快速验证:用临时Conda环境测试后自动清理的方案

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个上下文管理器风格的Python工具&#xff0c;功能&#xff1a;1.自动生成带时间戳的临时环境名 2.安装指定依赖包 3.执行用户代码 4.无论成功失败都自动删除环境 5.保留日志…

作者头像 李华
网站建设 2026/4/23 8:36:21

AutoGLM-Phone-9B部署案例:打造移动端智能助手完整指南

AutoGLM-Phone-9B部署案例&#xff1a;打造移动端智能助手完整指南 随着移动设备智能化需求的不断增长&#xff0c;如何在资源受限的终端上实现高效、多模态的大模型推理成为关键挑战。AutoGLM-Phone-9B 的出现为这一问题提供了极具前景的解决方案。本文将围绕该模型的部署实践…

作者头像 李华