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

时间:2019-08-24 06:26:18

标签: java arraylist

我的主要问题是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应该是同一对象(对象中的字段和值是相同的)。

1 个答案:

答案 0 :(得分:7)

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

  

contains()的工作原理是什么?

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

编辑:

根据@AselS的评论,contains()依赖于调用indexOf()的{​​{1}}。