我写了自己的Snake游戏,其中Snake是ArrayList of Points
,我使用这种方法检查自我进食:
public void checkSelfEating() {
for (int i = 1; i < body.size(); i++) {
if (body.get(i).equals(body.get(0))) {
sgv.setGameOverState(true);
sgv.setMessage("Game over!");
System.out.println("SelfEatingdetected");
}
}
}
但它太慢了,在游戏结束之前,蛇会做大约5次动作。有更好的解决方案吗?
答案 0 :(得分:3)
通过HashSet
和add
电话将正文单元存储在remove
中。 O(1)
。此外,如果您使用LinkedHashSet
,则可以非常轻松地管理头部和尾部(每条评论)。
这一切都在说,虽然这是正确的数据结构并回答了你的问题,但我完全不知道为什么必须对几十个元素进行for循环才能让你的程序变得如此可怕。我强烈建议分析并找到实际的瓶颈,因为我甚至不确定散列集在这个规模上会更快。