11-HashSet

news/2024/12/22 10:00:06/文章来源:https://www.cnblogs.com/Mc9r4dy/p/18403277

HashSet

特点

  1. 放入Integer类型数据

            //创建一个HashSet集合:HashSet<Integer> hs = new HashSet<>();hs.add(19);hs.add(5);hs.add(20);hs.add(19);//存重复数据hs.add(41);hs.add(0);System.out.println(hs.size());//6个数据,只存了5个System.out.println(hs);//[0, 19, 20, 5, 41] 唯一,无序//注:数据重复储存,只有第一个数据被存入。
    
  2. 放入String类型数据

            HashSet<String> hs = new HashSet<>();hs.add("hello");hs.add("apple");hs.add("banana");hs.add("html");hs.add("apple");hs.add("css");System.out.println(hs.size());//5System.out.println(hs);//[banana, apple, css, html, hello]
    
  3. 放入自定义的引用数据类型的数据:

            HashSet<Student> hs = new HashSet<>();hs.add(new Student(19,"lili"));//之前Integer和String不用对象是因为自动装箱hs.add(new Student(20,"lulu"));hs.add(new Student(18,"feifei"));hs.add(new Student(19,"lili"));hs.add(new Student(10,"nana"));hs.add(new Student(11,"jiejie"));System.out.println(hs.size());//6System.out.println(hs);//发现两个lili都存入了!
    //输出:[Student{age=18, name='feifei'}, Student{age=10, name='nana'},
    // Student{age=20, name='lulu'}, Student{age=19, name='lili'},
    // Student{age=19, name='lili'}, Student{age=11, name='jiejie'}]
    
    • 上面自定义的类型不满足 唯一,无序的特点。为什么呢?、

    因为Student没有重写hashCode和equals(底层原理分析)

简要底层原理

  • 底层=数组+链表
  • 数组都有下标
  • 存入的数据--->每一个数据通过hashCode计算哈希值(这里Integer类型的哈希值与存入的数据一样)
  • 把每个数据的哈希值通过一个表达式计算出存入底层数组的下标(可能不同哈希值算出一样的)
  • 分别将数据存入对应下标的数组中
    • 若存入时,该位置有数据---->要存入的数据与该数据做比较(equals方法)
    • 若相等,则不存入(相当于丢弃)
    • 若不等,在此位置追加出一个链表,将要存入的数据放在链表处(上图11与19)

疑问

  • 底层数组长度是多少
  • 数组的类型是上面
  • hashCode,equals方法真的调用了吗
  • 哈希值和一个表达式算出存放位置,底层表达式是什么
  • 同一个位置的不同数据是向前放还是向后放(是19后加链表11;还是11后加链表19)
  • 放入数组中的数据,是直接放的吗,是否封装成对象了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/794132.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VoceChat - 发现私有云社交的魅力

VoceChat使用反馈:发现私有云社交的魅力 在这个信息浩如烟海的时代,如何保持有效的沟通与信息共享,成为了我们每一个人都需要面对的挑战。很高兴在这段时间里,体验了VoceChat这款支持独立部署的个人云社交媒体聊天服务。作为一个高度灵活且保护用户数据隐私的通讯工具,Vo…

ChatGPT windows桌面版

下载 以下是综合版本,包括多个AI产品。https://github.com/lencx/Noi在download中找到适合自己的版本。 截图设置呼出快捷键左上角标志 noi 设置 快捷键 全局快捷键 输入一个快捷键(如:shift+ctrl+C) √可参考下图:版权木有,侵权不究,欢迎转载

南沙信C++陈老师解一本通题:1310:【例2.2】车厢重组

​ 【题目描述】在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小…

做题小结---进制专题

第一个是进制转换的问题 十进制转换n进制 进制转化最需要明白的就是这个图了得到的数字再取反就是转化的数字了 先取余后除就行了 牛客 周赛刚好考了这个 题 进制的好题了 考的很好 题这题很有思维难度 首先我们可以想到2个k 从一个k入手 一个k满足的 再看另一个k是否满足 这种…

Pipeline流水线通过git拉取Jenkinsfile报错 error: RPC failed; result=22, HTTP code = 404

Pipeline流水线通过git拉取Jenkinsfile报错 error: RPC failed; result=22, HTTP code = 404 在学习共享库时使用通过git拉取jenkinsfile时,报错在排查gitlab服务状态,网络通讯,防火墙规则以及Jenkins凭据均可以正常使用,最后发现的时在URL填写中缺少 .git 结尾所导致的,在…

入门pytorch

### 卷积神经网络模型卷积神经网络(简称 CNN)是一种专为图像输入而设计的网络。它最明显的特征就是具有三个层次,卷积层,池化层,全连接层。借用一张图,下图很好的表示了什么是卷积(提取特征),什么是池化(减少数据量),而全连接层就是一个简单普通的神经网络。如下代…

Javaweb-子查询

select * from emp where salary > (select salary from emp where name=猪八戒); 1. select * from emp where dep_id in (select did from dept where dname in (财务部,市场部)); 2. select * from emp where dep_id=(select did from dept where dname=财务部); 3. sel…

一个小例子,给你讲透典型的 Go 并发操作

一个小例子,给你讲透典型的 Go 并发操作 原创 訢亮 程序员新亮2024年09月08日 16:57 天津 听全文程序员新亮 GitHub 9K+ Star | 技术交流分享 206篇原创内容公众号如果你有一个任务可以分解成多个子任务进行处理,同时每个子任务没有先后执行顺序的限制,等到全部子任务执行完…

LeetCode 刷题—树

不会做简单题目的小菜菜!一:树 1、树描述的是一个父子关系;有节点;根节点;叶子节点三个相关的概念 2、树的高度;深度;层 3、二叉树:每个节点最多只有两个孩子 4、完全二叉树:除了叶子节点;每个孩子并不要求都为两个孩子(从上到下,从左到右依次填满节点) 5、满二叉…

软件安装——STM32开发

安装Keil5 MDK 安装器件支持包 软件注册 安装STLINK驱动 安装USB转串口驱动安装Keil5 MDK 下载链接(来自B站江协科技) 通过百度网盘分享的文件:STM32入门教程资料 链接:https://pan.baidu.com/s/17_sbwMXU-xBVFA2sK0smrg?pwd=cgn6 提取码:cgn6 解压并安装Keil5MDK安装包中…

findbi测试连接失败

导入的jar包没问题,然后装一个隔离包如下名字。因为没重启