为什么ArrayList上的contains()方法总是返回false?

Zop*_*opy 0 java arraylist

我的主要问题是返回的contains()方法ArrayList始终为false,但我不确定为什么。

我创建了一个,ArrayList<Position>名为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");
}
Run Code Online (Sandbox Code Playgroud)

Not found尽管我知道有一个Position应该是同一对象(对象中的字段和值相同),但它始终会打印。

Nar*_*hai 7

contains()方法取决于equals()列表中包含的对象的方法。在这种情况下,请确保您已equals()Position类中正确重写了方法。

如何contains()运作?

它拾取列表中的每个对象,并尝试将其与调用equals()方法传递的对象等同。只有equals()被正确覆盖,您才可以检查逻辑相等性。否则,只有true通过相同的引用,它才会返回。

编辑:

根据@AselS的评论,contains()取决于indexOf()哪个调用equals()