クラスAの2つのオブジェクトの値が同じele
の場合、その2つのオブジェクトは等しいです。だから私はオブジェクトのele
(どこでもs
の値を考慮していない)を返すtoStringとhashCodeをオーバーライドしました。Java - hashCodeとtoStringのオーバーライド
public class A {
private int ele;
private String s;
public int getEle() {
return ele;
}
public void setEle(int ele) {
this.ele = ele;
}
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
@Override
public int hashCode(){
return ele;
}
@Override
public String toString() {
return String.valueOf(ele);
}
}
public static void main(String[] args) {
Map<A, String> map = new HashMap<>();
A a1 = new A();
a1.setEle(10);
a1.setS("abc");
A a2 = new A();
a2.setEle(10);
a2.setS("efg");
map.put(a1, "val1");
map.put(a2, "val2");
System.out.println(map.get(a1));
System.out.println(map.get(a2));
}
出力:
val1
val2
しかし、私はマップにa1
とa2
の値を入れた場合、私は両方のmap.get(a1)
のために返されるval1
かval2
のいずれかを期待していましたおよびmap.get(a2)
。
ああ..私の悪い。私はそれがtoStringを使用して文字列表現を取得し、次にそれを比較すると思った – Ashwin
しかし、私はチェーン時にリストを使用すると思います。しかし、まずval1に入る。しかし、私は両方のためにval2を取得します。どうして? – Ashwin
マップに 'a2'を' put 'すると、 'equals'が' true'を返すのでマップは 'a1'と同じと見なします。マップはそこにあるキーと値のペア( 'Entry')、' a1 - > "val1" 'を' a2' - > "val2"と置き換えます。どちらの 'get'呼び出しでも' equals'が 'true'を返すので、毎回現在の値' 'val2''が取得されます。 – rgettman