将实例与Java中的HashMaps进行比较时出现的问题
我试图通过我创建的自定义类从HashMap中获取一个值 自定义类:将实例与Java中的HashMaps进行比较时出现的问题,java,hashmap,instance,Java,Hashmap,Instance,我试图通过我创建的自定义类从HashMap中获取一个值 自定义类: public class Coordinates { private int x; private int y; public Coordinates(int x, int y) { this.x = x; this.y = y; } public int getX() { return this.x; } publi
public class Coordinates {
private int x;
private int y;
public Coordinates(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return this.x;
}
public int getY() {
return this.y;
}
public boolean isSame(Coordinates coords) {
if (coords.getX() == this.x && coords.getY() == this.y) {
return true;
}
return false;
}
public String getAsString() {
return "("+this.x+", "+this.y+")";
}
public Coordinates getCoords() {
return this;
}
}
我有一个名为coordsJCB的HashMap,当我试图获取JCButton(一个自定义swing按钮)时,它说找不到它
private static HashMap<Coordinates, JCButton> coordsJCB = new HashMap<Coordinates, JCButton>();
coordsJCB.get(coords);
打印错误,即使它们是相同的。
我在谷歌上搜索了一下,得到了很多关于重写.equals函数的答案。但是这对我没有帮助,因为我不想比较“坐标”的两个实例,我需要通过传递一个坐标实例从HashMap中获取一个值
非常感谢您的帮助,因为我完全不知道该怎么办/ HashMap的键集对其元素进行散列,并通过散列进行比较 您需要在
坐标
类中重写对象.hashCode
和对象.equals
当x
和y
equalotherCoordinates.x
和otherCoordinates.y
时,您的equals
方法应分别返回true
对于hashCode
来说,这有点棘手,因为您的散列将基于两个int
s,因此您需要找到一种方法来避免弱散列(即容易重复的散列)
IDE的样板文件hashCode
实现功能应该对您有所帮助,但您可以进行额外的位移位,并使用更好的基本种子
例如,在Ecplise中:
- 右键单击您的
类坐标
- 单击
source
- 单击
生成hashCode()和equals()…
坐标
类中重写对象.hashCode
和对象.equals
当x
和y
equalotherCoordinates.x
和otherCoordinates.y
时,您的equals
方法应分别返回true
对于hashCode
来说,这有点棘手,因为您的散列将基于两个int
s,因此您需要找到一种方法来避免弱散列(即容易重复的散列)
IDE的样板文件hashCode
实现功能应该对您有所帮助,但您可以进行额外的位移位,并使用更好的基本种子
例如,在Ecplise中:
- 右键单击您的
类坐标
- 单击
source
- 单击
生成hashCode()和equals()…
在您的情况下,这将是错误的,因此您无法检索所需的值。您需要重写类中的hashCode()和equals()方法。 看看hashMap在Java中是如何工作的。它将通过调用equals()方法检查对象的相等性,该方法的默认实现使用“==”运算符检查引用。
在您的情况下,这将是错误的,因此您无法检索期望的值。它打印为错误,因为它们是不同的对象,因为
new
关键字它打印为错误,因为它们是不同的对象,因为new
关键字非常感谢。工作如梦:)非常感谢。工作如梦:)
System.out.println(new Coordinates(2, 3).equals(new Coordinates(2, 3)));