1
は、私は、コードスニペットを持っていると仮定します。Keyフィールドがクラスのインスタンスである場合、HashMapの値を更新する方法は?
package practice;
import java.util.*;
public class Practice {
public static void main(String[] args) {
Map<Temp,Integer> m = new HashMap<>();
m.put(new Temp(1,2), 5);
m.put(new Temp(1,2), 6);
System.out.println(m.size());
}
}
class Temp {
int x, y;
public Temp(int a, int b) {
this.x = a;
this.y = b;
}
}
出力:2
私はオブジェクトnew Temp(1,2)
に対応する値を更新しようとしていますが、それはそれを置き換えるのではなく挿入されます。そのため、サイズは2
です。古い値を置き換える方法は?その後
class Temp {
// ...
public boolean equals(Object obj) {
Temp temp = (Temp)obj;
return temp.x == this.x && temp.y == this.y;
}
public int hashCode() {
return Objects.hash(this.x, this.y);
}
}
:あなたはequals
とhashCode
メソッド実装していない限り
注 'こと;'スローされますが、 ' 'obj'が' Temp'のインセンスでない場合はClassCastException'を返します。代わりに 'false'を返します。 –