java - 当我添加重复项时,为什么 .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"))
这是完整的代码:
主要方法 ,
输出
市级
旅行班
谢谢您的帮助!
解决方案
请参阅下面给出的 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);
}
推荐阅读
- .net-core - 如何使用 Angular 部署 .NET Core 应用程序
- python - 有没有办法使用 python 将 Windows 鼠标光标更改为自定义光标?
- ios - KeyboardAvoidingView 在 IOS 上无法按预期工作
- python-3.x - 如何合并重复列值的行
- django - 如何在 django 中创建字典?
- swift - 如何在 macOS 上以编程方式在 Swift 中添加 NSView
- php - 如何将自定义模块的任务添加到 Calendar SuiteCRM
- php - 在 PHP 中访问多维数组
- compilation - 我需要为另一个处理器弧重新编译吗?
- javascript - 在选择选项中显示值而不是文本