Java 第14章 集合 课堂练习

文章目录

  • HashSet判断是否两次add都能加入成功
  • HashSet编码
  • 遍历HashMap
  • 判断输出中是否有"abc"

HashSet判断是否两次add都能加入成功

HashSet set = new HashSet();
set.add(new String("hsp"));
set.add(new String("hsp"));

第一次可以,第二次不能。因为hashset 的底层源码决定,如果equals能够度量并确定两个对象相同(String可以使用equals直接判断两个串是否相同),所以检测到两个String对象相同时无法重复加入hashset。

HashSet编码

在这里插入图片描述
hashCode 是 Object 类中的一个方法,它返回对象的哈希码。其默认实现在 Object 类中是基于对象的内存地址的,这就意味着不同对象(即使是同一个类)通常会有不同的哈希码。
【ps:在课堂上,老师为了让同一个类的对象聚集到hashset中的同一个key下,重写同一个类的hashcode使之返回相同的值。但由于equals比较的结果是不同的对象(即使是同一个类)而返回false,所以不会被判为相同而无法加入hashset】
下面重写equals和hashCode方法,如果name 和 age 值相同,则返回相同的hash值,保证映射到hashset的相同键值下;equals返回true,从而在同一键值的链表比较中,防止拥有相同name 和 age 值的两个对象重复(equals返回true则插入失败)。IDEA快捷键:alt+insert

public class HashSetExercise {public static void main(String[] args) {HashSet hashSet = new HashSet();hashSet.add(new Employee("milan", 18));//okhashSet.add(new Employee("smith", 28));//okhashSet.add(new Employee("milan", 18));//加入不成功.}
}//创建Employee
class Employee {private String name;private int age;public Employee(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;}@Overridepublic String toString() {return "Employee{" +"name='" + name + '\'' +", age=" + age +'}';}public void setAge(int age) {this.age = age;}//如果name 和 age 值相同,则返回相同的hash值:@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Employee employee = (Employee) o;return age == employee.age &&Objects.equals(name, employee.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}
}

遍历HashMap

在这里插入图片描述
考察遍历的HashMap的熟练使用。
另外,Object的toString方法被其他类重写时,即使编译类型是Object类,还是能够在输出类时调用被重写的toString方法。

@SuppressWarnings({"all"})
public class Exercise {public static void main(String[] args) {HashMap hashMap = new HashMap();Employee a = new Employee("a", 19000, "1");Employee b = new Employee("b", 18000, "2");Employee c = new Employee("c", 19000, "3");hashMap.put(a.getId(), a);hashMap.put(b.getId(), b);hashMap.put(c.getId(), c);Set set = hashMap.keySet();for (Object key :set) {Employee e = (Employee) hashMap.get(key);if (e.getSal() > 18000)System.out.println(e); // 根据key输出value// PS:// System.out.println(hashMap.get(key))输出的是Employee中重写的toString方法,// 因为此时Object的toString方法被Employee重写,// 但Employee中独有的方法不能被调用,需要先转成Employee类}System.out.println("========");Set set1 = hashMap.entrySet();Iterator iterator = set1.iterator();while (iterator.hasNext()) {Map.Entry next = (Map.Entry) iterator.next();Employee e = (Employee) next.getValue();if (e.getSal() > 18000)System.out.println(e);}}
}
@SuppressWarnings({"all"})
class Employee {private String name;private double sal;private String id;public Employee(String name, double sal, String id) {this.name = name;this.sal = sal;this.id = id;}@Overridepublic String toString() {return "Employee{" +"name='" + name + '\'' +", sal=" + sal +", id='" + id + '\'' +'}';}public String getName() {return name;}public double getSal() {return sal;}public String getId() {return id;}
}

判断输出中是否有"abc"

在这里插入图片描述
没有。因为按照长度大小进行比较,根据底层源码,两个String由于长度相同,加上匿名类中重写的比较方法以长度作为唯一度量标准,所以长度相同的就被认为是相同对象而不能加入treeset。

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

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

相关文章

直播电商“去网红化”势在必行,AI数字人打造品牌专属IP

近年来,网红直播带货“翻车”事件频发,给品牌商带来了信任危机和负面口碑的困扰,严重损害了企业的声誉。这证明强大的个人IP,对于吸引粉丝和流量确实能起到巨大的好处,堪称“金牌销售”,但太过强势的个人IP属性也会给企业带来一定风险&#x…

.NET 药厂业务系统 CPU爆高分析

Windbg 分析 1. CPU 真的爆高吗 还是老规矩,要想找到这个答案,可以使用 !tp 命令。 0:044> !tp logStart: 1 logSize: 200 CPU utilization: 88 % Worker Thread: Total: 8 Running: 4 Idle: 4 MaxLimit: 1023 MinLimit: 4 Work Request in Queue: …

如何本地搭建Zblog网站并通过内网穿透将个人博客发布到公网

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站…

Navicat里MySQL表的创建(详细)

我以Navicat连接MySQL为例,演示表的创建方法。 前提 创建表的语法: create table 表名 ( 字段名1,字段类型, 字段名2,字段类型, ...... 字段名n,字段类型 ); 我计划在test库存放一…

第三方登录-pc支付宝扫码登录流程

最近有个奇葩的需求,用户要支持支付宝扫码登录。这个需求很少见,那就做一下,看起来有点难,其实很简单。 先看结果 流程梳理 核心代码 获取支付宝扫码页面的url // 获取支付宝扫码登录页面的urlasync function getZFBLoginUrl()…

动态规划--三步问题

本题题目链接备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/three-steps-problem-lcci/ 个人主页:Lei宝啊 愿所有美好如期而遇 动态规划&…

Centos 8.5 Oracle12c安装

由于多次安装踩坑,所以本次写了一份12c安装的完整版。可以直接使用。 一、安装数据库基本信息 名称 值 主机名 database 操作系统 CentOS Linux release 8.5.2111 Oracle用户名/密码 oracle Oracle 版本 12c Enterprise Edition Release 12.2.0.1.0 oracle…

Java 基础学习(十五)集合排序、Lambda和Stream

1 集合排序 1.1 集合排序API 1.1.1 集合排序概述 集合排序是指对一个集合中的元素按照特定规则进行重新排列,以使得集合中的元素按照预定义的顺序呈现。 在集合排序中,通常需要定义一个比较规则,这个比较规则用于决定集合中的元素在排序后…

【Linux C | 文件I/O】文件的打开关闭 | open、creat、colse 函数

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

【LeetCode刷题笔记(11-1)】【Python】【和为 K 的子数组】【前缀和】【中等】

文章目录 引言和为 K 的子数组题目描述提示 解决方案1:【暴力枚举】解决方案2:【前缀和】结束语 和为 K 的子数组 引言 编写通过所有测试案例的代码并不简单,通常需要深思熟虑和理性分析。虽然这些代码能够通过所有的测试案例,但…

SQL进阶理论篇(十七):数据库主从同步的原理

文章目录 简介为什么需要主从同步主从同步的原理总结参考文献 简介 以MySQL数据库为例,在实际生产中,我们会如何对MySQL数据库进行性能优化呢? 比如说配合上Redis做缓存。Redis是一种高性能的内存数据库,而MySQL是一种基于磁盘文…

docker-compose安装Rocketmq总结,以及如何更换mq端口

默认你已经装好了docker哈 安装docker-compose sudo curl -L https://github.com/docker/compose/releases/download/1.25.1-rc1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-composechmod x /usr/local/bin/docker-composedocker-compose --version成功打印…

截断霍夫曼编码

截断霍夫曼编码是一种数据压缩技术,它基于霍夫曼编码的原理,通过截断霍夫曼树,减少编码中的冗余信息,实现更高效的数据压缩。在本文中,我们将详细探讨截断霍夫曼编码的原理、应用及其优势。 一、霍夫曼编码简介 霍夫曼…

12.21 汇编点亮STM32MP157小灯

.text .global _start _start: 时钟使能pb6 pf6 pe9LDR r0,0x50000A28LDR r1,[r0]ORR r1,r1,#(0x1<<4)ORR r1,r1,#(0x1<<5)ORR r1,r1,#(0x1<<1)STR r1,[r0]配置GPIO模式LDR r0,0x50006000LDR r1,[r0]BIC r1,r1,#(0x2<<20)ORR r1,r1,#(0x1<<20)B…

kubernetes集群应用 service进阶

kubernetes集群应用 Service进阶 一、场景 使用kubernetes集群运行工作负载时&#xff0c;由于Pod经常处于用后即焚状态&#xff0c;Pod对应的IP地址也会经常变化&#xff0c;因此我们不能直接访问Pod&#xff0c;可以通过Service对应的端点列表&#xff08;Endpoints&#x…

PaddleOCR Docker 容器快捷调用,快捷调用OCR API

文章目录 搞环境命令行测试Python调用测试转fastapi服务打包成镜像服务PaddleOCR 服务端模型总结&#xff0c;直接启动OCR服务 paddleOCR迎来大更新&#xff0c;搞一把新的api接口&#xff0c;直接用起来。 搞环境 搞容器&#xff1a; FROM nvidia/cuda:11.8.0-cudnn8-devel…

Python importlib模块详细教程

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com importlib模块是Python标准库中用于动态导入模块的工具。它提供了一系列函数&#xff0c;允许以编程方式加载、检查和操作模块。本文将深入探讨importlib的各种用法&#xff0c;并通过丰富的示例代码帮助你更好地…

华清作业day46

.text .global _start _start: led1 设置时钟使能 ldr r0,0x50000A28 ldr r1,[r0] orr r1,r1,#(0x1<<4) str r1,[r0]设置输出模式 ldr r0,0x50006000 ldr r1,[r0] bic r1,r1,#(0x3<<20) orr r1,r1,#(0x01<<20) str r1,[r0]设置推挽输出 ldr r0,0x5000600…

在QT Creator下用CMake编译GEOS库

最近&#xff0c;想要在C下编一个可用GDAL模块的地图管理系统&#xff0c;找来找去&#xff0c;找到了GEOS。GEOS&#xff08;Geometry Engine-Open Source&#xff09;开源几何引擎 是一个用于计算几何的JTS库的 C/C实现&#xff0c;专注于地理信息系统 &#xff08;GIS&#…

速通Python基础语法--语句篇

缩进和代码块 一 条件语句if/elif if的基本语法 示例 条件语句嵌套 练习1 练习2 二 空语句 三 while循环 示例 打印1-10 求1-100的和 求5! 求1-5的阶乘之和 四 for循环 for的基本语法 1~range[ ,) 五 continue/break continue:结束当前循环,继续下一次循环 break:结束整个循…