如果Key字段是类的实例,如何在HashMap中更新值?

时间:2017-11-17 18:41:22

标签: java 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的原因。如何替换旧值?

1 个答案:

答案 0 :(得分:1)

默认情况下,Java会比较引用,除非您实现equalshashCode方法:

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);
    }
}

然后:

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