第十二节:第五部分:集合框架:Set集合的特点、底层原理、哈希表、去重复原理

article/2025/7/5 13:48:51

Set系列集合特点

Set系列集合特点

哈希值

哈希值

HashSet集合的底层原理

HashSet集合的底层原理1
HashSet集合的底层原理2
HashSet集合的底层原理3
HashSet集合的底层原理4

HashSet集合去重复

HashSet集合去重复

代码

代码一:整体了解一下Set系列集合的特点

package com.itheima.day20_Collection_set;import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;//目标:整体了解一下Set系列集合的特点。
public class SetTest1 {public static void main(String[] args) {// 1、创建一个Set集合的对象//Set<Integer> set = new HashSet<>();// 创建了一个HashSet的集合对象。一行经典代码 HashSet: 无序 不重复 无索引//Set<Integer> set = new LinkedHashSet<>();//有序  不重复  无索引Set<Integer> set = new TreeSet<>();//可排序(升序)    不重复 无索引set.add(666);set.add(666);set.add(666);set.add(888);set.add(888);set.add(888);set.add(777);set.add(777);System.out.println(set);}
}

结果1

代码二:了解一下哈希值。Java中的所有对象,都可以调用0bejct类提供的hashcode方法,返回该对象自己的哈希值

Student类(学生类)

package com.itheima.day20_Collection_set;import java.util.Objects;public class Student {private String name;private int age;private double height;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", height=" + height +'}';}public Student() {}public Student(String name, int age, double height) {this.name = name;this.age = age;this.height = height;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getHeight() {return height;}public void setHeight(double height) {this.height = height;}
}

SetTest2 类(主程序)

package com.itheima.day20_Collection_set;
/*目标:了解一下哈希值。Java中的所有对象,都可以调用0bejct类提供的hashcode方法,返回该对象自己的哈希值
public int hashCode():返回对象的哈希值。
同一个对象多次调用hashcode()方法返回的哈希值是相同的。
不同的对象,它们的哈希值一般不相同,但也有可能会相同(哈希碰撞)。*/
public class SetTest2 {public static void main(String[] args) {Student s1 = new Student("飞鸟马时",17,165);Student s2 = new Student("枣伊吕波",17,155);System.out.println(s1.hashCode());System.out.println(s2.hashCode());String str1 = new String("abc");String str2 = new String("acD");System.out.println(str1.hashCode());System.out.println(str2.hashCode());}
}

结果2

代码三:自定义的类型的对象,比如两个内容一样的学生对象,如何让HashSet集合能够去重复

Student类(学生类)

package com.itheima.day20_Collection_set;import java.util.Objects;public class Student {private String name;private int age;private double height;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", height=" + height +'}';}//只要两个对象内容一样就返回true@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age && Double.compare(height, student.height) == 0 && Objects.equals(name, student.name);}@Overridepublic int hashCode() {// 姓名 年龄 身高计算哈希值的return Objects.hash(name, age, height);}public Student() {}public Student(String name, int age, double height) {this.name = name;this.age = age;this.height = height;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getHeight() {return height;}public void setHeight(double height) {this.height = height;}
}

SetTest3 (主程序)

package com.itheima.day20_Collection_set;import java.util.HashSet;
import java.util.Set;//目标:自定义的类型的对象,比如两个内容一样的学生对象,如何让HashSet集合能够去重复!
public class SetTest3 {public static void main(String[] args) {Student s1 = new Student("飞鸟马时",17,165);Student s2 = new Student("枣伊吕波",17,155);Student s3 = new Student("枣伊吕波",17,155);Set<Student> students = new HashSet<>();students.add(s1);students.add(s2);students.add(s3);System.out.println(students.toString());}
}

去重复后


http://www.hkcw.cn/article/ZBCmcBpUso.shtml

相关文章

deepseek原理和项目实战笔记2 -- deepseek核心架构

混合专家&#xff08;MoE&#xff09; ​​混合专家&#xff08;Mixture of Experts, MoE&#xff09;​​ 是一种机器学习模型架构&#xff0c;其核心思想是通过组合多个“专家”子模型&#xff08;通常为小型神经网络&#xff09;来处理不同输入&#xff0c;从而提高模型的容…

迈向分布式智能:解析MCP到A2A的通信范式迁移

智能体与外部世界的桥梁之言&#xff1a; 在深入探讨智能体之间的协作机制之前&#xff0c;我们有必要先厘清一个更基础的问题&#xff1a;**单个智能体如何与外部世界建立连接&#xff1f;** 这就引出了我们此前介绍过的 **MCP&#xff08;Model Context Protocol&…

TCP/IP协议精华总结pdf分享

hi &#xff0c;大家好&#xff0c;应小伙伴们的要求&#xff0c;上次分享了个人的一些学习和职场经验&#xff0c;其中网络协议PDF文档是我之前学习协议的时候总结一些精华知识&#xff0c;网络属于基本功&#xff0c;是互联网必备知识&#xff0c;我深信掌握好核心20%知识&am…

齐次变换矩阵与运动旋量的指数映射

在三维空间中&#xff0c;刚体的位姿&#xff08;位置和姿态&#xff09;可以通过齐次变换矩阵进行描述。齐次变换矩阵是一种 44 的矩阵&#xff0c;其一般形式为&#xff1a; T [ R p 0 1 ] T\begin{bmatrix}R&p\\0&1\end{bmatrix} T[R0​p1​] 其中&#xff0c; R …

MySQL DDL操作全解析:从入门到精通,包含索引视图分区表等全操作解析

目录 一、DDL 基础概述 1.1 DDL 定义与作用 1.2 DDL 语句分类 1.3 数据类型与存储引擎 1.3.1 数据类型 1.3.2 存储引擎差异 二、基础 DDL 语句详解 2.1 创建数据库与表 2.1.1 创建数据库 2.1.2 创建表 2.2 修改表结构 2.2.1 添加列 2.2.2 修改列属性 2.2.3 删除列…

torch.randn vs torch.rand

1 分布类型&#xff1a; randn&#xff1a;生成标准正态分布&#xff08;均值 0&#xff0c;标准差 1&#xff09; rand&#xff1a;生成 [0, 1) 区间的均匀分布 2 数值范围&#xff1a; randn&#xff1a;可能产生负数&#xff08;范围 (-∞, ∞)&#xff09; rand&#xff…

NLP学习路线图(十九):GloVe

自然语言处理&#xff08;NLP&#xff09;的核心挑战在于让机器理解人类语言的丰富含义。词向量&#xff08;Word Embeddings&#xff09;技术通过将词语映射到高维实数空间&#xff0c;将离散的符号转化为连续的向量&#xff0c;为NLP任务奠定了坚实基础。在众多词向量模型中&…

极客时间:用 FAISS、LangChain 和 Google Colab 模拟 LLM 的短期与长期记忆

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

dify应用探索

一个典型的 Agent Multi-Agent 系统 智能导购会根据用户意图分类并传递给相应商品导购Agent&#xff0c;返回商品信息。采用Multi-Agent架构&#xff0c;其中Router Agent负责对用户问题进行意图 分析&#xff0c;并路由到其它商品导购Agent,商品导购Agent负责向厥客收 集商品…

py爬虫的话,selenium是不是能完全取代requests?

selenium适合动态网页抓取&#xff0c;因为它可以控制浏览器去点击、加载网页&#xff0c;requests则比较适合静态网页采集&#xff0c;它非常轻量化速度快&#xff0c;没有浏览器开销&#xff0c;占用资源少。当然如果不考虑资源占用和速度&#xff0c;selenium是可以替代requ…

c++类和对象-继承

参考链接&#xff1a;46 类和对象-继承-继承方式_哔哩哔哩_bilibili 1.概述 作用&#xff1a;提高代码复用率&#xff0c;多个子类和父类有相同之处&#xff0c;又有自己各自的特点。例如基类人有四肢、会走路、说话&#xff0c;不同子类中国人是黑头发&#xff0c;说汉语&am…

MySQL中的锁

MySQL中有哪些锁? 全局锁(FTWRL) 含义&#xff1a;Flush Table with Read Lock的缩写&#xff0c;它会锁定整个数据库实例&#xff0c;让所有表都处于只读状态。 使用全局锁&#xff0c;要执行的命令: flush tables with read lock 之后&#xff0c;整个数据库就处于只读…

探索 Dify 的工作流:构建智能应用的新范式

目录 前言1. 什么是 Dify 的工作流2. 工作流的核心组成2.1 节点&#xff08;Node&#xff09;2.2 连接线&#xff08;Edge&#xff09;2.3 上下文与变量系统 3. 工作流的典型使用场景3.1 多轮对话与智能客服3.2 文档问答系统3.3 多语言营销文案生成3.4 多模型对比与评估&#x…

分词算法BBPE详解和Qwen的应用

一、TL&#xff1b;DR BPE有什么问题&#xff1a;依旧会遇到OOV问题&#xff0c;并且中文、日文这些大词汇表模型容易出现训练中未出现过的字符Byte-level BPE怎么解决&#xff1a;与BPE一样是高频字节进行合并&#xff0c;但BBPE是以UTF-8编码UTF-8编码字节序列而非字符序列B…

小云天气APP:精准预报,贴心服务

在快节奏的现代生活中&#xff0c;天气变化对我们的日常生活、出行安排以及健康状况都有着重要影响。一款精准、便捷且功能丰富的天气预报应用&#xff0c;无疑是提升生活品质的必备工具。小云天气APP正是这样一款为安卓用户量身定制的天气预报应用&#xff0c;凭借其精准的天气…

阿里云服务器ECS详细购买流程

1、打开云服务器ECS官方页面 打开阿里云服务器ECS页面 点击进入阿里云服务器 2、付费类型选择 阿里云服务器付费类型 3、地域节点 阿里云服务器全球28个地域&#xff0c;中国大陆地域如华北2&#xff08;北京&#xff09;、华东1&#xff08;杭州&#xff09;、华南1&#xf…

FastAPI+Pyomo实现线性回归解决饮食问题

之前在 FastAPI介绍-CSDN博客 中介绍过FastAPI&#xff0c;在 Pyomo中线性规划接口的使用-CSDN博客 中使用Pyomo解决饮食问题&#xff0c;这里将两者组合&#xff0c;即FastAPI在服务器端启动&#xff0c;通过Pyomo实现线性回归&#xff1b;客户端通过浏览器获取饮食的最优解。…

【C++篇】STL适配器(上篇):栈与队列的底层(deque)奥秘

&#x1f4ac; 欢迎讨论&#xff1a;在阅读过程中有任何疑问&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;如果你觉得这篇文章对你有帮助&#xff0c;记得点赞、收藏&#xff0c;并分享给更多对C感兴趣的…

leetcode刷题日记——二叉树的层次遍历

[ 题目描述 ]&#xff1a; [ 思路 ]&#xff1a; BFS&#xff0c;利用队列特性完成对树的层次遍历运行如下 int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes) {if (!root) {*returnSize 0;return NULL;}struct TreeNode* queue[2000];…

【优选算法 | 队列 BFS】构建搜索流程的核心思维

算法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;双指针滑动窗口二分查找前缀和位运算模拟链表哈希表字符串模拟栈模拟(非单调栈)优先级队列 很多人学 BFS 的时候都知道“用队列”&#xff0c;但为什么一定是队列&#xff1f;它到底在整个搜索流程中起了什么作…