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

重学java 55. 集合 Set接口

我救自己万万次,铮铮劲草,绝不动摇

                                                        —— 24.6.2

一、Set集合介绍

Set和Map密切相关的
Map的遍历需要先变成单列集合,只能变成set集合

二、HashSet集合的介绍和使用

1.概述

        HashSet是Set接口的实现类

2.特点

        a、元素唯一

        b、元素无序

        c、无索引

        d、线程不安全

3.数据结构:哈希表

        a、jdk8之前:哈希表 = 数组 + 链表

        b、jdk8之后:哈希表 = 数组 + 链表 + 红黑树

                加入红黑树的目的:查询速度快

4.方法

        和collection一样

5.遍历

        a、增强for

        b、迭代器

package S87Set;import java.util.HashSet;
import java.util.Iterator;public class Demo241HashSet {public static void main(String[] args) {HashSet<String> set = new HashSet<>();set.add("张三");set.add("李四");set.add("王五");set.add("赵六");set.add("田七");// 读取顺序无序System.out.println(set);// 遍历 增强forfor (String s : set) {System.out.println(s);}System.out.println("——————————————————————————");// 迭代器Iterator<String> iterator = set.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}}
}

三、LinkedHashSet的介绍以及使用

1.概述

        LinkedHashSet extends HashSet

2.特点

        a、元素唯一

        b、元素有序

        c、无索引

        d、线程不安全

3.数据结构        

        哈希表 + 双向链表        

4.使用

        和HashSet一样

package S87Set;import java.util.Iterator;
import java.util.LinkedHashSet;public class Demo242LinkedHashSet {public static void main(String[] args) {LinkedHashSet<String> set = new LinkedHashSet<>();set.add("张三");set.add("李四");set.add("王五");set.add("赵六");set.add("田七");// 读取顺序无序System.out.println(set);// 遍历 增强forfor (String s : set) {System.out.println(s);}System.out.println("——————————————————————————");// 迭代器Iterator<String> iterator = set.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}}
}

四、哈希值

1.概述:

        是由计算机算出来的一个十进制数,可以看做是对象的地址值

2.获取对象的哈希值,使用的是object中的方法

        public native int hashcode()

3.注意:

        如果重写了hashcode方法,那计算的就是对象内容的哈希值了

        如果不重写hashcode方法,默认计算对象的哈希值

五、字符串的哈希值如何计算出来

直接跑到stringLatin1.hashcode(value)底层源码,

计算abc的哈希值 —> 0xff这个十六进制对应的十进制255任何数据和255做&运算,都是原值

第一圈:
        h=31*0+97 =97
第二圈:
        h=31*97+98 = 3105
第三圈:
        h=31*3105+99=96354
问题:在计算哈希值的时候,有一个定值就是31,为啥?
        31是一个质数,31这个数通过大量的计算,统计,认为用31,可以尽量降低内容不一样但是哈希值一样的情况
        内容不一样,哈希值一样(哈希冲突,哈希碰撞)

六、HashSet的存储去重复的过程

1.先计算元素的哈希值(重写hashCode方法),在比较内容(重写equals方法)

2.先比较哈希值,如果哈希值不一样,存储

3.如果哈希值一样,再比较内容
        a.如果哈希值一样,内容不一样,存
        b.如果哈希值一样,内容也一样,去重复

package S88Hash;import java.util.HashSet;public class Demo244HashTest {public static void main(String[] args) {HashSet<Object> set = new HashSet<>();set.add("abc");set.add("通话");set.add("重地");set.add("abc");System.out.println(set);    // [通话, 重地, abc]}
}

七、Hashset存储自定义类型如何去重复

        1.如果Hashset存储自定义类型,如何去重复呢?重写hashcode和equals方法,让Hashset比较属性的哈希值以及属性的内容
        2.如果不重写hashcode和equals方法,默认调用的是object中的,不同的对象,肯定哈希值不一样,equals比较对象的地址值也不一样,所以此时即使对象的属性值一样,也不能去重复

相关文章:

重学java 55. 集合 Set接口

我救自己万万次&#xff0c;铮铮劲草&#xff0c;绝不动摇 —— 24.6.2 一、Set集合介绍 Set和Map密切相关的 Map的遍历需要先变成单列集合&#xff0c;只能变成set集合 二、HashSet集合的介绍和使用 1.概述 HashSet是Set接口的实现类 2.特点 a、元素唯一 b、元素无序 c、无索引…...

spring项目修改时间格式

一、配置方式 在application.yml上添加 spring:jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT8 二、注解方式 1、添加依赖 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId&…...

每周统计-20240531

用于测试程序的稳定性&#xff1a; 龙虎榜&#xff1a; 成交额&#xff1a; 封成比&#xff1a; 收盘前放量&#xff1a; 开盘抢筹&#xff1a; 封单额&#xff1a;...

【工具】探索 DOU:每用户数据使用量

缘分让我们相遇乱世以外 命运却要我们危难中相爱 也许未来遥远在光年之外 我愿守候未知里为你等待 我没想到为了你我能疯狂到 山崩海啸没有你根本不想逃 我的大脑为了你已经疯狂到 脉搏心跳没有你根本不重要 &#x1f3b5; 邓紫棋《光年之外》 什么是 DOU…...

JVM之垃圾判断的详细解析

垃圾判断 垃圾介绍 垃圾&#xff1a;如果一个或多个对象没有任何的引用指向它了&#xff0c;那么这个对象现在就是垃圾 作用&#xff1a;释放没用的对象&#xff0c;清除内存里的记录碎片&#xff0c;碎片整理将所占用的堆内存移到堆的一端&#xff0c;以便 JVM 将整理出的内…...

07- Redis 中的 HyperLogLog 数据类型和应用场景

1. 介绍 Redis HyperLogLog 是 Redis 2.8.9 版本新增的数据类型&#xff0c;是一种用于【统计基数】的数据集合类型&#xff0c;基数统计就是指统计一个集合中不重复的元素个数。但要注意&#xff0c;HyperLogLog 的统计规则是基于概率完成的&#xff0c;不是非常准确&#xf…...

jenkins应用2-freestyle-job

1.jenkins应用 1.jenkins构建的流程 1.使用git参数化构建&#xff0c;用标签区分版本 2.git 拉取gitlab远程仓库代码 3.maven打包项目 4.sonarqube经行代码质量检测 5.自定义制作镜像发送到远程仓库harbor 6.在远程服务器上拉取代码启动容器 这个是构建的整个过程和步骤…...

K210视觉识别模块学习笔记1:第一个串口程序_程序烧录与开机启动

今日开始学习K210视觉识别模块:简单的认识与串口程序 亚博智能的K210视觉识别模块...... 固件库版本: canmv_yahboom_v2.1.1.bin 既然K210作为一个视觉识别外设模块来使用&#xff0c;我认为第一个程序 就没必要学点灯之类的了&#xff0c;直接学习串口如何配置开始为妥&…...

[数据集][目标检测]脑溢血检测数据集VOC+YOLO格式767张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;767 标注数量(xml文件个数)&#xff1a;767 标注数量(txt文件个数)&#xff1a;767 标注类别…...

如何借VR之手,让展厅互动更精彩?

VR虚拟现实技术以其卓越的沉浸式体验为特点&#xff0c;引领用户踏入一个全新的虚拟世界&#xff0c;正因如此&#xff0c;它开始被广泛应用于展厅、商业等多个领域。那么&#xff0c;今天&#xff0c;让我们就来了解一下这种技术是如何为展厅带来精彩互动体验的吧&#xff01;…...

微信小程序如何使用地图

微信小程序使用地图功能时&#xff0c;主要涉及到地图组件的引入、配置、以及相关的API调用。以下是一个详细的使用指南&#xff1a; 1. 引入地图组件 在微信小程序的.wxml文件中&#xff0c;通过<map>标签引入地图组件。你可以设置地图的经纬度、缩放级别、控件等属性…...

力扣 287. 寻找重复数

给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 [1, n] 范围内&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 &#xff0c;返回 这个重复的数 。你设计的解决方案必须 不修改 数组 nums 且只用常量…...

怎样清理Mac存储空间 苹果电脑内存不够用怎么办 苹果电脑内存满了怎么清理

在使用 Mac 电脑的过程中&#xff0c;用户经常会遇到磁盘空间不足的困扰&#xff0c;这时候就需要寻找有效的方法来清理苹果电脑内存了。 清理Mac存储空间可以通过多种方法进行&#xff0c;以确保你的Mac能够高效运行并释放宝贵的存储空间。以下是一些有效的清理和优化方法&am…...

网络遗忘权的实现方法

网络遗忘权的实现方法 目录 从禁书说起 从销毁硬件信息的方法得到的启示 现在网络遗忘权的实现方法 从禁书说起 古代有禁书的需求,直接的方法就是贴出告示,强行收缴,然后付之一炬. 这个方法的问题在于只要有一个人敢冒死藏书,再次手抄或者是印刷,就 会让之前的禁书努力,付…...

【Python内功心法】:深挖内置函数,释放语言潜能

文章目录 &#x1f680;一、常见内置函数&#x1f308;二、高级内置函数⭐1. enumerate函数&#x1f44a;2. eval函数❤️3. exec函数&#x1f4a5;4. eval与exec 中 globals与locals如何用☔4-1 globals 参数&#x1f3ac;4-2 locals 参数 ❤️5. filter函数&#x1f44a;6. z…...

JS-09-es6常用知识1

目录 1 模板字符串 1.1 模板字符串基本用法 1.2 模板字符串解决了一些痛点 2 解构赋值 2.1 对象的解构赋值 2.2 函数参数的解构赋值 2.3 补写&#xff1a;属性的简写 3 rest参数 3.1 arguments 3.2 rest参数 3.3 补充&#xff1a;判断数据类型 4 箭头函数 4.1 …...

SpringBoot 基础之自动配置

SpringBoot 自动配置 SpringBoot 通过 自动配置 简化了大量的繁复的配置信息。 启动类 Application 中有两处特别之处&#xff1a; 注解&#xff1a;SpringBootApplication run 方法&#xff1a;SpringApplication.run(…) SpringBootApplication 注解至少等价于以下三个注…...

Oracle dblink 发现Network 等待事件的分析 enq: KO - fast object checkpoint

所有的sql 通过dblink 查询全部等待中&#xff0c; 同一个SQL 20多个session 在跑&#xff0c;等待事件network&#xff0c;可能怀疑是不是网络断开了&#xff0c;导致没有返回 执行sql 如下&#xff1a; BEGIN Xdblink ; END; 去到dblink 所在的db&#xff0c;发现20多个sql在…...

SpringMVC:向三大域对象存数据

1. 简介 Servlet中的三个域对象 请求域&#xff1a;request会话域&#xff1a;session应用域&#xff1a;application 主要是通过&#xff1a;setAttribute getAttribute方法来完成在域中数据的传递和共享。 点击跳转Servlet详细概念 // 向域中存储数据 void setAttribute(St…...

如何用python做一个用户登录界面——浔川python社

1 需解决的问题&#xff1a; 1.1如何用python做一个用户登录界面&#xff1f; 1.2需要用到哪些库、模块&#xff1f; 2 问题解决&#xff1a; 2.1 回答 1.1 &#xff1a;合理即可&#xff0c;无标准回答。 2.2 回答 1.2 &#xff1a;tk库&#xff08;缩写&#xff09;、GUL界面…...

Qwen2.5-72B-Instruct-GPTQ-Int4实战案例:新能源电池BMS日志分析与故障模式推演

Qwen2.5-72B-Instruct-GPTQ-Int4实战案例&#xff1a;新能源电池BMS日志分析与故障模式推演 1. 项目背景与模型介绍 新能源电池管理系统(BMS)是电动汽车和储能系统的核心组件&#xff0c;每天产生大量运行日志数据。传统分析方法依赖人工经验&#xff0c;效率低下且难以发现潜…...

基于springboot的论坛网站设计与实现.7z(源码+论文+开题报告)

[点击下载链接》》》] 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了论坛网站的开发全过程。通过分析论坛网站管理的不足&#xff0c;创建了一个计算机管理论坛网站的方案。文章介绍了论坛网站的系统分析部分&…...

HARMONYOS应用实例242:不等式组解集图示

不等式组解集图示 功能:输入两个不等式,自动在数轴上绘制两个解集,并高亮显示其公共部分。这是一个基于 HarmonyOS ArkTS 开发的交互式不等式求解工具,用户可以输入两个不等式(如 x > 2 和 x < 5),系统会自动解析并在数轴上绘制两个解集,同时高亮显示它们的公共部…...

Zotero效率翻倍!Zutilo插件保姆级配置指南(附我常用的10个快捷键方案)

Zotero效率革命&#xff1a;用Zutilo插件打造键盘流文献工作流 每天面对数百篇文献&#xff0c;你是否厌倦了在鼠标和键盘间反复切换&#xff1f;科研老手都知道&#xff0c;真正的效率提升往往来自那些能减少手指移动距离的微小优化。Zutilo正是Zotero生态中那个被严重低估的…...

Codex CLI 多环境配置秘籍:如何用 profiles 一键切换 OpenAI/Mistral/Ollama

Codex CLI 多环境配置秘籍&#xff1a;如何用 profiles 一键切换 OpenAI/Mistral/Ollama 当你的开发工作流需要同时对接多个AI模型提供商时——比如公司项目使用OpenAI的GPT-4&#xff0c;个人实验采用本地Ollama托管的Mistral&#xff0c;而临时调试又需要连接Azure的API端点—…...

PvZ Toolkit:突破植物大战僵尸限制的终极修改器

PvZ Toolkit&#xff1a;突破植物大战僵尸限制的终极修改器 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 副标题&#xff1a;面向全阶段玩家的游戏体验增强工具&#xff0c;让每一场攻防战尽在掌…...

Reset Windows Update Tool:开源工具解决Windows更新问题的3个高效方案

Reset Windows Update Tool&#xff1a;开源工具解决Windows更新问题的3个高效方案 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool …...

Zemax优化别再乱点‘锤子’了!一个光学新手的真实踩坑与避坑指南

Zemax优化实战&#xff1a;从新手误区到高效操作的进阶指南 刚接触Zemax的光学设计师们&#xff0c;往往会被软件中那个神秘的"锤形优化"按钮所吸引——看似简单的点击就能自动改善设计&#xff0c;这种诱惑难以抗拒。但很快就会发现&#xff0c;盲目依赖这个功能可能…...

从科研到工程:为什么我选择用ROS2重构Apollo/autoware的规控算法?

从科研到工程&#xff1a;为什么我选择用ROS2重构Apollo/autoware的规控算法&#xff1f; 在自动驾驶领域&#xff0c;从实验室原型到量产系统的跨越&#xff0c;往往伴随着技术栈的全面升级。三年前&#xff0c;当我第一次将Apollo的规划控制模块移植到ROS1环境时&#xff0c;…...

iOS折叠动画终极指南:用Popping打造惊艳视觉效果

iOS折叠动画终极指南&#xff1a;用Popping打造惊艳视觉效果 【免费下载链接】popping A collection of animation examples for iOS apps. 项目地址: https://gitcode.com/gh_mirrors/po/popping 想要为你的iOS应用添加令人惊艳的折叠动画效果吗&#xff1f;Popping项目…...