gpt4 book ai didi

java - HashMap 不添加重复键

转载 作者:行者123 更新时间:2023-12-01 07:06:29 25 4
gpt4 key购买 nike

import java.util.*;

class U {
int x;

U(int x) {
this.x = x;
}
}

public class G {
public U a = new U(22);
public U b = new U(23);
Integer y = 22;
Integer r = 23;

void a() {
Map<U, Integer> set = new HashMap<U, Integer>();
set.put(a, y);
set.put(a, r);
set.put(b, y);
System.out.print(set.size() + " ");
}

public static void main(String[] args) {
G m = new G();
m.a();
}
}

我总是对 map 和列表感到困惑。我知道当map将键放入集合中时,它会调用hashcode,如果桶相同,则会调用equal方法。但是,我了解到,如果类重写这两个方法,则仅不存储重复的键。例如包装类:String 实现了自己的 hashcode 和 equal 方法。此外,如果您不这样做,则会调用唯一的哈希码,并将重复的键存储在集合中。

但是在上面的例子中,U类没有实现hashcode和equal方法。然而,Map 不允许重复的键。

我检查了尺寸:2它应该是 3,因为我的 U 类没有实现 hashcode 或 equal。

请清理我

提前致谢

最佳答案

HashMap 不允许重复的键,

如果您不提供 hashcode()equals() 实现,它会从父类(super class)中扩展(对于您的情况,它是java.lang.Object),并且该实现为同一对象和 equals() 提供相同的哈希码。在同一对象上返回 true

public boolean equals(Object obj) {
return (this == obj);
}

还有

关于java - HashMap 不添加重复键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22644821/

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