Som*_*ser 0 java android hashmap
我有一个按钮的哈希映射到矩阵中的对应点.例如,在3X3矩阵中,btn0为(0,0),依此类推.该点是一个带有2个坐标变量的int类.我的Hashmap如下所示:
public final static HashMap<Button, Point> buttonPoint = new HashMap<Button, Point>();
buttonPoint.put(btn0, new Point(0,0));
buttonPoint.put(btn1, new Point(0,1));
buttonPoint.put(btn2, new Point(0,2));
buttonPoint.put(btn3, new Point(1,0));
...
Run Code Online (Sandbox Code Playgroud)
我进行了一些计算,得出了一个说法(1,0).现在我想从这些坐标中获取按钮.我做以下事情:
Button selectedButton = null;
for(java.util.Map.Entry<Button, Point> entry : buttonPoint.entrySet()){
if(Objects.equals(selectedPoint, entry.getValue())){
selectedButton=entry.getKey();
}
}
Run Code Online (Sandbox Code Playgroud)
但是selectedButton仍然是null.我调试了代码,我发现迭代中某些点的值是相等的,但if条件永远不会变为真.关于Hashmaps有什么我想念的吗?或者还有其他方法吗?解决方案的任何链接或方向都会有所帮助.提前致谢.
如果你想从坐标获得一个按钮,使用a Map<Button, Point>不是一个好的解决方案.你应该用一个Map<Point, Button>代替.这样,你需要在给定点获得按钮
Button b = map.get(point);
Run Code Online (Sandbox Code Playgroud)
并且此操作在恒定时间内运行.
在这两种情况下,您都需要覆盖equals()和hashCode()中Point.否则,一个点永远不会等于任何其他点.
@Override
public boolean equals(Object o) {
if (o == null) {
return false;
}
if (o == this) {
return true;
}
if (o.getClass() != Point.class) {
return false;
}
Point other = (Point) o;
return other.x == this.x && other.y == this.y;
}
@Override
public int hashCode() {
return Objects.hash(x, y);
}
Run Code Online (Sandbox Code Playgroud)