java中的HashSet类

一、HashSet类

实现了Set接口,无法存储重复元素

特点:元素位置无序、无索引、底层是HashMap

1、构造方法

内部是HashMap的构造方法

2、add方法

(1)元素在底层存储使用到了三种数据结构:hash数组、链表、树

(2)添加流程(根据hashcode值与hash数组长度取余计算出元素应该添加在hash数组的位置)

对于要添加的元素A,遍历集合,将A与集合中的每一个元素进行比较,如果两者的hash值不相等,则继续和下一个元素比较,否则使用equals方法比较两个元素的值是否相等,相等,则不将A添加到集合中,不相等,则继续和下一个元素比较,当和最后一个元素比较完成无异常情况时,将A添加到集合中

注:通话和重地两个词语的hashcode值相等但内容不同

(3)实现

(4)底层使用hashCode和equals,与单独使用equals相比,提高了效率,两者结合起来使用,也保证了安全

3、常用方法

4、hashCode和equals

Set集合中添加元素时调用的是元素类型中的hashCode和equals方法,如果没有,则会调用其父类中的方法

以String类为例,String类中重写了hashCode(使用内容生成hashcode值)和equals(比较内容是否相等),则可以在使用set集合添加String类型元素时不会将重复元素添加进去

如果使用自定义类,想要实现不包含内容上重复的元素,一定要重写hashCode和equals方法

Object类中的hashCode(这里面的东西哪去了???)和equals(比较的是对象的地址)

String类中的hashCode(使用内容生成hashcode码)和equals(通过内容进行比较)

--------------------------------------自定义一个类放入set集合------------------------------

未重写hashCode、equals、toString方法,会从父类中调用,会将内容重复的元素加到集合中

重写hashCode、equals、toString方法

实现只能将内容不重复的元素加入集合

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

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

相关文章

告别登录烦恼,WPS免登录修改器体验!(如何实现不登录使用WPS)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 解决方案 📒🎈 获取方式 🎈⚓️ 相关链接 ⚓️ 📖 介绍 📖 想象一下,如果你能够绕过繁琐的登录流程&#x…

C# WinForm —— 22 Forms.Timer 组件介绍与使用

1. 简介 Timer 计时器 组件不会出现在窗体中,每隔 定义的间隔时间,就会触发事件,主要应用于Windows应用程序,独占一个线程,可以修改 UI 元素 属性 属性解释(Name)控件ID,在代码里引用的时候会用到,一般…

运营美区TikTok小店常见问题汇总,你中了几个?

大家好,我是IPdodo的小编,专注于分享出海网络解决方案,致力于为TikTok运营人提供解决视频0播放、直播间卡顿、不进人甚至封号等问题的跨境网络专线。目前已经帮助数千位用户成功开启跨境业务。 今天,将针对美区TikTok小店的常见问…

Swift使用JSONDecoder处理json数据,实现json序列化和反序列化

Json数据处理是开发中不可获取的一项技能,如果你不会处理json数据,那你离失业就不远了,所以学完了swift基础教程,还是先老老实实学习一下json处理吧,有了这项技能,你才可以继续下一个网络请求阶段的开发&am…

Git总结超全版

最近想系统的回顾一下Git的使用,如果只想快速的集成git到idea,可以参考另一篇我的博客中的git部分 目录 版本管理工具简介Git安装与配置Git远程仓库配置 Git常用命令为常用命令配置别名(可选)Git忽略文件.gitignore一些概念*本地仓库操作删除仓库内容 *远…

滴滴三面 | Go后端研发

狠狠的被鞭打了快两个小时… 注意我写的题解不一定是对的,如果你认为有其他答案欢迎评论区留言 bg:23届 211本 社招 1. 自我介绍 2. 讲一个项目的点,因为用到了中间件平台的数据同步,于是开始鞭打数据同步。。 3. 如果同步的时候…

Sketch v100 for Mac 安装教程【支持M芯片】

Sketch v100 for Mac 安装教程【支持M芯片】 原文地址:https://blog.csdn.net/weixin_48311847/article/details/139104315

CasaOS系统玩客云安装内网穿透工具实现无公网IP远程访问

文章目录 前言1. CasaOS系统介绍2. 内网穿透安装3. 创建远程连接公网地址4. 创建固定公网地址远程访问 前言 2月底,玩客云APP正式停止运营,不再提供上传、云添加功能。3月初,有用户进行了测试,局域网内的各种服务还能继续使用&am…

【学习笔记】后端(Ⅰ)—— NodeJS(Ⅰ)

NodeJS 1、概述 1.1、NodeJS是什么 1.2、NodeJS的主要作用 1.3、NodeJS的优点 1.4、NodeJS 与 浏览器 的 JavaScript 对比 1.4.1 ECMAScript 介绍 1.4.2 JavaScript 介绍 1.4.3 TypeScript 介绍2、基础篇 2.1、Buff…

LangChain带你轻松玩转ChatGPT等大模型开发

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…

Python中cv2 (OpenCV, opencv-python)库的安装、使用方法demo最新详细教程

🐯 Python中cv2 (OpenCV, opencv-python)库的安装、使用方法demo最新详细教程 📸 文章目录 🐯 Python中cv2 (OpenCV, opencv-python)库的安装、使用方法demo最新详细教程 📸摘要引言正文📘 OpenCV库概述🚀 …

【Git教程】(十九)合并小型项目 — 概述及使用要求,执行过程及其实现,替代解决方案 ~

Git教程 合并小型项目 1️⃣ 概述2️⃣ 使用要求3️⃣ 执行过程及其实现 在项目的初始阶段,往往需要针对重要的设计决策和技术实现原型实验。当原型评估结束后,需要将那些成功的原型合并起来称为整个项目的初始版本。 在这样的情景中,各个原…

php代码审计参考

代码审计思路: 从个人角度出发,如果环境允许的话,可以先选择做一个”程序员“再来做代码审计。因为从开发者的位置去思考问题,可以快速定位问题。学习面向对象编程以及面向过程编程,编写一些 项目提升对代码的理解能力…

Android Compose 六:常用组件 Button

Button 1 简单使用 Button(onClick { /*TODO*/ }) {Text(text "我是一只button里的text")}效果 颜色为什么是这个样子? 前面Text里我们讲过 主题色会影响组件的颜色 这里我使用的颜色如下 primary Color(0xFFFF0000),onPrimary Color(0xFF00FF00),p…

什么是合法IP地址?

IP地址,即互联网协议地址,是网络设备在互联网上进行通信的唯一标识符。IP地址有两种主要版本:IPv4和IPv6。为了保证网络通信的正常进行,IP地址需要是合法的。本文将详细阐述什么是合法IP地址,以及其重要性和验证方法。…

如何给实拍添加旋转模糊效果?视频模糊特效PR模板剪辑素材

PR特效模板,高级旋转模糊效果视频模板剪辑素材。 特征: After Effects 2019及以上兼容项目。 Premiere Pro 2021及以上兼容项目。 可用分辨率(4K–HD–方形–移动)。 不需要插件。 包括教程。 免费下载:https://prmu…

宝藏级丨图解项目管理全流程(上篇)

《项目管理知识体系指南》的定义:项目是为创造独特的产品、服务或成果而进行的临时性工作。项目管理就是将各种知识、技能、工具与技术应用于项目活动,以满足项目的要求。项目管理的全流程包括以下几个阶段: 项目启动阶段。这是开始一个新项…

GAN实例基于神经网络

目录 1.前言 2.实验 1.前言 需要了解GAN的原理查看对抗生成网络(GAN),DCGAN原理。 采用手写数字识别数据集 2.实验 import argparse import os import numpy as np import mathimport torchvision.transforms as transforms from torchvi…

RedisTemplate使用最详解(三)--- opsForHash()

1、put(H var1, HK var2, HV var3) 新增hashMap值 var1 为Redis的keyvar2 为key对应的map值的keyvar3 为key对应的map值的值var2相同替换var3 redisTemplate.opsForHash().put("hashValue","map1","value1"); redisTemplate.opsForHash().put(&q…

Java官网下载JDK17版本详细教程(下载、安装、环境变量配置)

第一步,去百度搜索甲骨文官网 第二步 第三步 第四步 第五步 第六步 第七步 第八步 第九步 第十步 然后在系统变量里面找到path-编辑-新建添加这个,点击确定就好了 %JAVA_HOME%\bin 就完成了,接下来测试是否成功。 测试: 第一步&a…