2017-11-17 1 views
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); 
    } 
} 

:あなたはequalshashCodeメソッド実装していない限り

答えて

1

Javaは、デフォルトで参照を比較一時温度=(温度が)は、obj

System.out.println(m.size()); // 1 
+0

注 'こと;'スローされますが、 ' 'obj'が' Temp'のインセンスでない場合はClassCastException'を返します。代わりに 'false'を返します。 –

関連する問題