按位置在列表中搜索点

Searching Point in a list by its position

我遇到以下问题:我正在使用如下所示的点列表

List<Point> list = new ArrayList<Point>();

现在我正在尝试检查一个新点是否已经是列表的成员以及它的前一个邻居是否是他的坐标。

if ((!list.contains(point)) && list.contains(point.getX() - 1)) {
......
}

现在的问题是这个表达式永远不会为真,虽然我可以清楚地看到,使用调试器,位置为 (x-1, y) 的点在它的左边(高度不是这里很有趣)在列表中,而点本身不在列表中。

有什么想法吗?

问题出在 list.contains(point.getX() - 1)。您正在检查 integer 对象是否存在,而不是 Point 对象。这是因为 ArrayList#contains() 接受了一个 Object 参数——编译器将整数视为一个对象并且没有问题。

您需要显式传递一个 Point 实例,例如:

Point neighborPoint = new Point(point.getX() - 1, point.getY());

if (!list.contains(point) && list.contains(neighborPoint)) {
   ...