假设我有一个代码片段:
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
。如何替换旧值?
Java默认情况下会比较引用,除非您实现equals
和hashCode
方法:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句