一个类有成员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

相关文章

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java