一个类有成员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++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java JUC并发集合详解之线程安全容器完全攻略

《JavaJUC并发集合详解之线程安全容器完全攻略》Java通过java.util.concurrent(JUC)包提供了一整套线程安全的并发容器,它们不仅是简单的同步包装,更是基于精妙并发算法构建... 目录一、为什么需要JUC并发集合?二、核心并发集合分类与详解三、选型指南:如何选择合适的并发容器?在多

使用MapStruct实现Java对象映射的示例代码

《使用MapStruct实现Java对象映射的示例代码》本文主要介绍了使用MapStruct实现Java对象映射的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、什么是 MapStruct?二、实战演练:三步集成 MapStruct第一步:添加 Mave

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

Java中实现对象的拷贝案例讲解

《Java中实现对象的拷贝案例讲解》Java对象拷贝分为浅拷贝(复制值及引用地址)和深拷贝(递归复制所有引用对象),常用方法包括Object.clone()、序列化及JSON转换,需处理循环引用问题,... 目录对象的拷贝简介浅拷贝和深拷贝浅拷贝深拷贝深拷贝和循环引用总结对象的拷贝简介对象的拷贝,把一个

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定