gpt4 book ai didi

java - 带对象键的 HashMap

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

我创建了一个HashMap,其中对象作为键,字符串作为值。当我分配一个具有相同帐号(这是唯一键)的新对象并且我没有插入到我的 HashMap 中时,我遇到了问题,如果我得到它,则会返回旧值而不是无效的。我是 Java HashMap 内部工作的新手。

class Main {
public static void main(String[] args) {
HashMap<Account, String> map = new HashMap<Account, String>();
Account a1 = new Account(1);
a1.setHolderName("A_ONE");
Account a2 = new Account(2);
a2.setHolderName("A_TWO");
map.put(a1, a1.getHolderName());
map.put(a2, a2.getHolderName());
a1.setHolderName("Defaulter");
a2.setHolderName("Bankrupt");
System.out.println(map.get(a1)); //Prints A_ONE
System.out.println(map.get(a2)); //Prints A_TWO
Account a3 = new Account(1);
a3.setHolderName("A_THREE");
System.out.println(map.get(a3)); //Prints value of a1 ??? WHY SO
}
}

public class Account
{
private int accountNumber;
private String holderName;

public Account(int accountNumber) {
this.accountNumber = accountNumber;
}

public String getHolderName() {
return holderName;
}

public void setHolderName(String holderName) {
this.holderName = holderName;
}

public int getAccountNumber() {
return accountNumber;
}

//Depends only on account number
@Override
public int hashCode() {
final int prime = 31;
int result = 13;
result = prime * result + accountNumber;
return result;
}

//Compare only account numbers
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Account other = (Account) obj;
if (accountNumber != other.accountNumber)
return false;
return true;
}
}

期望 - map.get(a3) 应该为 null

最佳答案

它不会导致您的期望,因为重写了 equals 方法寻求持有者名称进行测试。

尝试以下方法,

 @Override
public boolean equals(Object o) {
if (o == this) return true;
if (!(o instanceof Account)) {
return false;
}
Account user = (Account) o;
return user.accountNumber == accountNumber &&
user.holderName.equals(holderName);
}

在重写哈希码和 equals 方法时,您需要注意某些点。您可以阅读更多内容https://www.mkyong.com/java/java-how-to-overrides-equals-and-hashcode/

希望这对您有帮助。

关于java - 带对象键的 HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56554356/

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