Java 按位置搜索列表中的点

Java 按位置搜索列表中的点,java,list,contains,point,Java,List,Contains,Point,我有以下问题:我正在处理的点列表如下所示 List<Point> list = new ArrayList<Point>(); 现在的问题是,这个表达式永远都不是真的,尽管我可以使用调试器清楚地看到,位置(x-1,y)在它左边(高度在这里不有趣)的点在列表中,而点本身不是 有什么想法吗?问题在于list.contains(point.getX()-1)。您正在检查整数是否存在,而不是点对象是否存在。这是因为ArrayList#contains()接受一个Object参数

我有以下问题:我正在处理的点列表如下所示

List<Point> list = new ArrayList<Point>();
现在的问题是,这个表达式永远都不是真的,尽管我可以使用调试器清楚地看到,位置(x-1,y)在它左边(高度在这里不有趣)的点在列表中,而点本身不是


有什么想法吗?

问题在于
list.contains(point.getX()-1)
。您正在检查整数是否存在,而不是
对象是否存在。这是因为
ArrayList#contains()
接受一个
Object
参数——编译器将整数视为一个对象,可以使用它

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

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

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

这里有些奇怪。。在条件的第一部分,您检查列表是否包含类型为
Point
的对象,在第二部分,您检查列表是否包含类型为
Integer
的对象。。(我想)。。这是对的吗?不是点类型的对象,而是具有x和y值的点。第二次你理解正确。我的观点是(5,5)。我正在检查是否还有另一个值为(4,y)的点,这就是你现在要检查的。。请看下面的答案。是的,但点是一个设置了x和y值的对象。点=新点()。它不是列表。包含(点);那是我写的。。这就是为什么我说它的类型是
Point
。我希望答案对你有帮助。啊,我明白了。但是为什么必须有一个构造器点(intx,inty)。为什么我不能使用awt对象点?@JürgenK。我不知道您正在使用
java.awt.Point
(您在任何地方都没有提到它)。是的,你可以在那个类中使用可用的构造函数。但是我仍然需要编写自己的equals方法吗?抱歉,我认为它很清楚。我没有更新我的答案
java.awt.Point
已经覆盖了
equals
Point neighborPoint = new Point(point.getX() - 1, point.getY());

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