【JavaSE】Java基础语法(二十八):HashSet集合

news2024/12/24 9:03:04

文章目录

  • 1. HashSet集合概述和特点
  • 2. HashSet集合的基本应用
  • 3. 哈希值
  • 4. HashSet集合存储学生对象并遍历【应用】


在这里插入图片描述

1. HashSet集合概述和特点

  • 底层数据结构是哈希表
  • 存取无序
  • 不可以存储重复元素
  • 没有索引,不能使用普通for循环遍历

2. HashSet集合的基本应用

存储字符串并遍历

public class HashSetDemo {
	public static void main(String[] args) {
		//创建集合对象
		HashSet<String> set = new HashSet<String>();
		//添加元素
		set.add("hello");
		set.add("world");
		set.add("java");
		//不包含重复元素的集合
		set.add("world");
		
		//遍历
		for(String s : set) {
			System.out.println(s);
		}
	}
}

3. 哈希值

  • 哈希值简介
    是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
  • 如何获取哈希值
    Object类中的public int hashCode():返回对象的哈希码值
  • 哈希值的特点
    • 同一个对象多次调用hashCode()方法返回的哈希值是相同的
    • 默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的
      哈希值相同

4. HashSet集合存储学生对象并遍历【应用】

  • 案例需求
    创建一个存储学生对象的集合,存储多个学生对象,使用程序实现在控制台遍历该集合
    要求:学生对象的成员变量值相同,我们就认为是同一个对象

  • 代码实现

public class Student {
	private String name;
	private int age;
	
	public Student() {
	}
	
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	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;
	}
	
	@Override
	public boolean equals(Object o) {
		if (this == o) return true;
		if (o == null || getClass() != o.getClass()) return false;
			Student student = (Student) o;
		if (age != student.age) return false;
			return name != null ? name.equals(student.name) : student.name ==
		null;
	}
	
	@Override
	public int hashCode() {
		int result = name != null ? name.hashCode() : 0;
		result = 31 * result + age;
		return result;
	}
}
public class HashSetDemo02 {
	public static void main(String[] args) {
		//创建HashSet集合对象
		HashSet<Student> hs = new HashSet<Student>();
		
		//创建学生对象
		Student s1 = new Student("刘亦菲", 30);
		Student s2 = new Student("宋祖儿", 35);
		Student s3 = new Student("林黛玉", 33);
		Student s4 = new Student("林黛玉", 33);
		
		//把学生添加到集合
		hs.add(s1);
		hs.add(s2);
		hs.add(s3);
		hs.add(s4);
		
		//遍历集合(增强for)
		for (Student s : hs) {
			System.out.println(s.getName() + "," + s.getAge());
		}
	}
}

总结
HashSet集合存储自定义类型元素,要想实现元素的唯一,要求必须重写自定义类型的hashCode
方法和equals方法


在这里插入图片描述

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

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

相关文章

Pytorch深度学习之神经网络入门详解

目录 Pytorch 入门 1.将每个图片的label作为txt文件写入另外一个文件夹&#xff08;txt文件名与图片文件名相同&#xff09; 2.tensorboard的summary writer 3.torchvision中的transforms 4.DataLoader 5.神经网络-卷积层Conv2d 6.最大池化层 7.非线性激活函数Relu 9.…

微信的大动作,很多人要颤抖了

4月25日&#xff0c;微信团队发布关于微信公众号营销内容合规规范通知&#xff0c;要求公众号在投放商业广告时需要标注广告字样。 刚开始觉得也没啥&#xff0c;无非就是加个广告的字样&#xff0c;让消费者可以及时识别出来&#xff0c; 但从效果来看&#xff0c;似乎效果并不…

华为OD机试真题B卷 Java 实现【猜密码】

一、题目描述 小杨申请了一个保密柜,但是他忘记了密码。只记得密码都是数字,而且所有数字都是不重复的。 请你根据他记住的数字范围和密码的最小数字数量,帮他算下有哪些可能的组合,规则如下: 输出的组合都是从可选的数字范围中选取的,且不能重复;输出的密码数字要按照…

意外的坚持,意外的收获!

前言&#xff1a; 转眼间&#xff0c;2023就快过了一半&#xff0c;回忆间感觉跟过完年没多久一样&#xff1b;时间是真的过的快...... 简单总结一下最近&#xff1a; 一、锻炼身体&#xff1a; 最近这段时间开始恢复锻炼身体&#xff0c;现在感觉一天下班回来&#xff0c;身体…

Java 21 新特性和改进

Java 21 是 Java 17 之后的下一个 LTS 版本。虚拟线程在 Java 21 中将成为正式功能。可以预期的是&#xff0c;Java 21 会成为一个很流行的 Java 版本。 Java 21 将在 2023 年 9 月 19 日发布。目前 Java 21 包含的内容已经基本确定了。下面来梳理一下 Java 21 中会包含的内容。…

【AI提示】ChatGPT提示工程课程(吴恩达OpenAI)转换文本(中文chatgpt版)

设置 翻译 通用翻译器 语调变换 格式转换 拼写检查/语法检查。 转换 在本笔记中&#xff0c;我们将探索如何使用大型语言模型进行文本转换任务&#xff0c;例如语言翻译、拼写和语法检查、语气调整和格式转换。 设置 import openai import osfrom dotenv import load_dotenv, f…

Maven初级

Maven初级 Maven简介 传统项目管理状态分析 jar包不统一&#xff0c;jar包不兼容工程升级维护过程操作繁琐 Maven是什么 Maven的本质是一个项目管理工具&#xff0c;将项目开发和管理过程抽象成一个项目对象模型&#xff08;POM&#xff09;POM&#xff1a;项目对象模型 Ma…

一图看懂 itsdangerous 模块:将受信任的数据传递到不受信任的环境的帮助工具,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 itsdangerous 模块&#xff1a;将受信任的数据传递到不受信任的环境的帮助工具&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;摘要&#x1f9ca;模块…

Ae:跟踪摄像机

在时间轴面板上选择要跟踪的素材图层&#xff0c;在跟踪器面板中单击跟踪摄像机 Track Camera按钮之后&#xff0c;会向素材图层添加“3D 摄像机跟踪器” 3D Camera Tracker效果&#xff0c;并立即对视频画面逐帧分析以反求原始摄像机运动。 还有其它几种添加 3D 摄像机跟踪器效…

GeForce RTX 3060 Ti+cuda 11.6+Anaconda3搭建Pytorch深度学习环境

室友新购入一个笔记本&#xff0c;笔记本的显卡是GeForce RTX 3060 Ti&#xff0c;记录一下使用GeForce RTX 3060 Ticuda 11.6Anaconda3搭建Pytorch深度学习环境。 安装很简单&#xff0c;当你有了Python环境时记住一个核心命令即可&#xff0c;显卡驱动因该在之前已经安装过了…

ChatGPT 与我合力开发 xargin blog archive 插件:曹大博客的新奇探险

之前写的批量删除 chatGPT 对话的插件[1]&#xff0c;最近我收到了一个五星好评&#xff1a; 虽然不赚钱&#xff0c;交个朋友嘛&#xff0c;还是挺高兴的。而且借助 chatGPT&#xff0c;我是在与全世界的用户交流&#xff0c;想想就激动。 最近我发现自己让 chatGPT 帮忙写前端…

jQuery其他方法及插件使用

1. 拷贝对象 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width,…

跨域 + 四种解决办法

目录 同源策略 解决方案 1、jsonp 2、前端代理 3、后端解决 4、Nginx代理 同源策略 说到跨域就不得不提到同源策略&#xff0c;什么是同源策略&#xff1f; 请求的时候拥有相同的 协议 域名 端口 只要有一个不同就属于跨域 解决方案 解决跨域问题一共有四种方式&#xff…

chatgpt赋能python:Python中的Join方法详解:简化拼接字符串的操作

Python中的Join方法详解&#xff1a;简化拼接字符串的操作 在Python编程中&#xff0c;拼接字符串是一项常见的操作。在过去&#xff0c;我们通常使用“”符号来连接多个字符串。但是&#xff0c;这种方法不是很高效&#xff0c;特别是当需要拼接大量字符串时。这时候&#xf…

基于html+css的图展示98

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

python+django+vue学生在线选课系统93pul

随着信息化时代的到来&#xff0c;网络系统都趋向于智能化、系统化&#xff0c;选课系统也不例外&#xff0c;但目前国内的有些学校仍都使用人工管理&#xff0c;学校规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&#xff0c;…

初识Spring -- Spring入门保姆级教程(一)

文章目录 前言一、Spring是什么&#xff1f;1.概述2.了解spring家族3.spring系统概述4.spring优点5.spring学习路线 二、入门spring1.核心概念2.IOC入门案例3.DI入门案例4.bean的配置5.spring 中 bean的实例化--构造方法6.bean的实例化 -- 静态工厂实例化7.bean实例化--实例工厂…

IEEE802.3和IEEE802.11的分类(仅为分类)

IEEE802.3标准 IEEE802.3:10兆以太网 ●10Base&#xff0d;5 使用粗同轴电缆&#xff0c;最大网段长度为500m&#xff0c;基带传输方法&#xff1b; ●10Base&#xff0d;2 使用细同轴电缆&#xff0c;最大网段长度为185m&#xff0c;基带传输方法&#xff1b; ●10Base&am…

python+vue宠物用品商城网站django宠物领养系统31e70

我们也变得越来越忙碌、对生活的要求也变得更加严格&#xff0c;对快速和方便的服务的需求也在逐渐增加。因此&#xff0c;对宠物行业的管理、服务的要求也越来越严格。为适应时代的发展&#xff0c;各大宠物店开始广泛地使用电脑来进行管理&#xff0c;并推出在线宠物管理系统…

华为OD机试真题B卷 Java 实现【去除多余空格】,附详细解题思路

一、题目描述 去除文本多余空格&#xff0c;但不去除配对单引号之间的多余空格。给出关键词的起始和结束下标&#xff0c;去除多余空格后刷新关键词的起始和结束下标。 条件约束&#xff1a; 不考虑关键词起始和结束位置为空格的场景&#xff1b;单词的的开始和结束下标保证…