一个类有成员1与成员2,在集合中不断添加对象,对成员1去重,更新成员2(保持最大)

2024-04-20 23:58

本文主要是介绍一个类有成员1与成员2,在集合中不断添加对象,对成员1去重,更新成员2(保持最大),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一个类有成员1与成员2,在集合中不断添加对象,对成员1去重,更新成员2(保持最大)
对于这个需求,之前我的想法是用HashSet做,并且重写类的equals与hashcode方法,让这个类在去重的时候只care成员1,然后HashSet如果contains这个对象,就去查找返回这个对象。
但是事实证明我想的不仅复杂,而且错了,到现在我都没能找到HashSet查找返回对象的方法。
听取了一个朋友的建议,我修改了策略,使用HashMap做这件事。用成员1作为key,对象作为value。
这里以学生类为例,维护名字的唯一性,不断使得年龄最大。

import java.util.*;class Student{String name;int age;public Student(String name, int age) {this.name = name;this.age = age;}
}public class Main {HashMap<String,Student> hashMap=new HashMap<>();void insertHashMap(Student student){if(hashMap.containsKey(student.name)){Student oldObj=hashMap.get(student.name);if(student.age>oldObj.age){System.out.println("update, new student "+student.name+" age is "+student.age+", greater than "+oldObj.age);hashMap.remove(student.name);hashMap.put(student.name,student);}elseSystem.out.println("ignore, new student "+student.name+" age is "+student.age+", less than "+oldObj.age);}else{hashMap.put(student.name, student);System.out.println("update, new student "+student.name+" age is "+student.age);}}void solve(){insertHashMap(new Student("tqc",22));insertHashMap(new Student("tqc",45));insertHashMap(new Student("dd",33));insertHashMap(new Student("dd",11));insertHashMap(new Student("ff",11));insertHashMap(new Student("ff",22));}public static void main(String[] args) {new Main().solve();}
}

结果

update, new student tqc age is 22
update, new student tqc age is 45, greater than 22
update, new student dd age is 33
ignore, new student dd age is 11, less than 33
update, new student ff age is 11
update, new student ff age is 22, greater than 11

这篇关于一个类有成员1与成员2,在集合中不断添加对象,对成员1去重,更新成员2(保持最大)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/921669

相关文章

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

Java实现将byte[]转换为File对象

《Java实现将byte[]转换为File对象》这篇文章将通过一个简单的例子为大家演示Java如何实现byte[]转换为File对象,并将其上传到外部服务器,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言1. 问题背景2. 环境准备3. 实现步骤3.1 从 URL 获取图片字节数据3.2 将字节数组

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C