我尝试在不同的 GridPositions(x,y) 之间画线。每个 GridPos 都有 4 个连接,北、东、南、西。问题是如果我画一条从 GridPos(1,1) 到 GridPos(2,2) 的线,程序稍后还会在 GridPos(2,2) 和 GridPos(1,1) 之间画一条反向线。
我试图用这个类来解决问题(WarpGate 和 GridPos 一样):
public class GateConnection {
private WarpGate gate1 = null;
private WarpGate gate2 = null;
public GateConnection(WarpGate gate1, WarpGate gate2) {
super();
this.gate1 = gate1;
this.gate2 = gate2;
}
@Override
public int hashCode() {
final int prime = 31;
int result = prime * ((gate1 == null) ? 0 : gate1.hashCode());
result += prime * ((gate2 == null) ? 0 : gate2.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
GateConnection other = (GateConnection) obj;
if ((gate1.equals(other.gate1) || gate1.equals(other.gate2)) && (gate2.equals(other.gate2) || gate2.equals(other.gate1))) {
return true;
}
return false;
}
}
可以将此类添加到 HashSet 并且双重绘画将消失,但我不知道 hashValue 是否始终是唯一的。
WarpGate的HashCode(由eclipse自动生成):
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + gridX;
result = prime * result + gridY;
return result;
}
现在我使用一个 ArrayList。我看看 GateConnection 是否存在,如果不存在则添加。但是这个版本比使用 HashSet 需要更多的资源。
编辑:
白色矩形是绘制的连接,数字是 GridPositions(x|y),红色箭头是绘制矩形的两个方向,因为 GridPos(2|2) 与 GridPos(4|2) 和(4|2) 至 (2|2)