首页 > 解决方案 > 当我添加重复项时,为什么 .contains 返回 false?

问题描述

我正在编写一个简单的方法来将对象添加到 ArrayList 如果它还没有包含它。我正在使用 .contains 方法,但由于某种原因,当我将对象的副本添加到 ArrayList 时,.contains 方法返回 false,即使我已经将相同的对象添加到 ArrayList。

这是我的City课:

class City {
  private String name, country;
  //getters, setters, constructor
}

当我有ArrayList这样的:

List<City> destinations = new ArrayList<>();

添加了一个对象

destinations.add(new City("Edmonston", "CA"));

如果我检查它是否包含这样的重复对象,它会返回 false

destinations.contains(new City("Edmonston", "CA"))

这是完整的代码:

主要方法 主要方法

输出 输出

市级 市级

旅行班 旅行班

谢谢您的帮助!

标签: javaarraylistcontains

解决方案


请参阅下面给出的 List#contains 的文档

如果此列表包含指定元素,则返回 true。更正式地说,当且仅当此列表包含至少一个元素 e 满足 Objects.equals(o, e) 时才返回 true。

因此,您需要覆盖equals. class City你可以这样做:

@Override
public boolean equals(Object obj) {
    City other = (City) obj;
    return Objects.equals(name, other.name) && Objects.equals(country, other.country);
}

推荐阅读