一个类有成员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);
            }else
                System.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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值