为什么地图的第一个值不会被第三个值覆盖?

问题描述 投票:0回答:1

以下地图的第一个值应被第三个值覆盖,但不是。为什么?

import java.util。*;

class A
{

int a, b;
A(int a,int b) {
    this.a = a;
    this.b = b;
}

public boolean equals(A aa) {
    if(this.a == aa.a && this.b == aa.b) {
        return true;
    }
    return false;
}
public int hashCode() {
    return this.a-this.b;
}
}

主类

public class MyClass { // main class


public static void main(String args[]) { // main method

 Map<A,Character> map = new LinkedHashMap<>();


 map.put(new A(1,2),'a');   //first
 map.put(new A(1,3),'b');   //second
 map.put(new A(1,2),'v');   //third


 for(A a : map.keySet()) {
     System.out.println(a.a+" "+a.b+" "+map.get(a));
 }

}

}

代码输出为:

1 2 a

1 3 b

1 2 v

java dictionary key equals
1个回答
0
投票

您正在重载 equals方法,而不是重载。正确的签名是equals(Object)

public boolean equals(Object o) {
    if (!o instanceof A) {
        return false;
    }
    A aa = (A) o;
    if(this.a == aa.a && this.b == aa.b) {
        return true;
    }
    return false;
}

将来避免这些错误的一个好方法是用@Override注释注释您尝试覆盖的方法-如果您的签名错误,如此处一样,编译器将发出错误。

© www.soinside.com 2019 - 2024. All rights reserved.