我的主要问题是contains()
上的ArrayList
方法始终返回false
,但我不确定为什么。
我创建了一个名为ArrayList<Position>
的{{1}},其中包含许多名为allValidPositions
的自定义类的实例。
当我尝试在Position
中找到特定的Position
元素时,它总是返回ArrayList
。
false
它总是打印// The parameters represent X and Y coordinates
Position positionToCheck = new Position(0, 0);
if (allValidPositions.contains(positionToCheck) {
System.out.println("Found");
} else {
System.out.println("Not found");
}
,尽管我知道有一个Position应该是同一对象(对象中的字段和值是相同的)。
答案 0 :(得分:7)
contains()
方法取决于列表中包含的对象的equals()
方法。在这种情况下,请确保在equals()
类中正确重写了Position
方法。
contains()
的工作原理是什么?
它将拾取列表中的每个对象,并尝试将其与您通过调用equals()
方法传递的对象等效。只有正确equals()
被覆盖,您才能检查逻辑相等性。否则,如果您传递相同的引用,它将仅返回true
。
编辑:
根据@AselS的评论,contains()
依赖于调用indexOf()
的{{1}}。