gpt4 book ai didi

java - 如何在哈希集中进行比较,如果第二个元素相等则返回第二个值?

转载 作者:行者123 更新时间:2023-12-02 02:31:12 25 4
gpt4 key购买 nike

我需要比较哈希集中的两个名字,如果是的话,将age1更改为age2。例如如果user1 Max等于user2 Max为true,则12变为10。主要目标使用HashSet。并像这样进行比较 if(user1.contain ??? ) { user2.remove???

public static void main(String[] args) {
SimpleUser user1 = new SimpleUser("Max",12);
SimpleUser user2 = new SimpleUser("Max",10);
SimpleUser user3 = new SimpleUser("Tomek",50);

Set<SimpleUser> group2 = new HashSet<>();
group2.add(user1);
group2.add(user2);
group2.add(user3);

System.out.println(group2);

现在我的输出是:[SimpleUser{name='Max',age=12},SimpleUser{name='Tomek',age=50}]

my class User

package com.company;

public class SimpleUser {
private String name;
private int age;

public SimpleUser(String name, int age) {
this.name = name;
this.age = age;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

SimpleUser setUser = (SimpleUser) o;

return name != null ? name.equals(setUser.name) : setUser.name == null;
}

@Override
public int hashCode() {
return name != null ? name.hashCode() : 0;
}

@Override
public String toString() {
return "SimpleUser{" + "name='" + name + '\'' + ", age=" + age + '}';


}
}

最佳答案

实际上您没有显示相关代码,大概看起来像这样

class SimpleUser{
String name;int age;
SimpleUser(String name,int age){this.name=name;this.age=age;}
public String toString(){return name+" "+age;}

public boolean equals(Object obj) {return name.equals(((SimpleUser)obj).name);};

public int hashCode() {return name.hashCode();};
}

因为如果不是这样,您的 3 个添加将在打印中产生 3 个元素。

然后是documentation :

boolean add(E e)

Ensures that this collection contains the specified element (optional operation). Returns true if this collection changed as a result of the call. (Returns false if this collection does not permit duplicates and already contains the specified element.)

事实上,Set 不允许重复,并且“Max”已经存在。 Set 不会“更新”,它只是忽略重新添加元素(它认为正在发生)。打印这些 add-s 也可以表明发生了什么。

最简单的修复方法是在添加之前删除任何元素:

group2.remove(user1);group2.add(user1);
group2.remove(user2);group2.add(user2);
group2.remove(user3);group2.add(user3);

关于java - 如何在哈希集中进行比较,如果第二个元素相等则返回第二个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47079782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com