gpt4 book ai didi

java - 自定义对象作为映射键

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

据我所知,如果自定义对象需要作为映射的键,则需要重写 hashcode 和 equals 方法,但在我的情况下,它可以在不重写的情况下工作。有人可以告诉我出了什么问题吗?

    Map<Student,Integer> map = new HashMap<>();
Student s1=new Student(1,"A");
Student s2=new Student(2,"B");
Student s3=new Student(3,"C");

map.put(s1,1);
map.put(s2,2);
map.put(s1,3);

for(Student s:map.keySet()) {
System.out.println(map.get(s) + "->" + s.id + " " +s.name);
}

正确的输出:

3->1A

2->2B

最佳答案

它是 properties 之一equals 方法:它是自反的。这意味着

x.equals(x) == true 

一个对象总是等于它自己。在这种情况下,您将依赖 equals 方法的默认实现。

map.put(s1,1); 
map.put(s1,3);

并且因为默认实现是自反的

s1.equals(s1) == true 

1 替换为 3

但是如果你这样做,结果会有所不同

map.put(new Student(1,"A"),3);

s1.equals(new Student(1,"A"));

您需要覆盖 hashCodeequals 才能使其正常工作。

关于java - 自定义对象作为映射键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55830727/

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