【发布时间】:2020-10-01 13:38:20
【问题描述】:
我正在编写一个简单的方法来将一个对象添加到 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"))
这是完整的代码:
主要方法 ,
输出
城市等级
旅行类
感谢您的帮助!
【问题讨论】:
-
请添加文字而不是图片链接,尤其是那些难以阅读的图片。我几乎看不到你的 Trip 课程
-
问题可能是你没有覆盖你的
equals和hashCode方法。根据docs,它使用Objects.equals方法来比较元素。Objects.equals(a, b)首先检查两个参数是否为null,然后使用a.equals(b)检查它们是否相同 -
循环不适合你吗?
-
@user 在什么情况下我必须重写 hashCode 方法?我测试了只是覆盖 equals 方法,它工作正常。
-
@gili.g 当您使用
HashSet、HashMap等时,它们会使用您对象的哈希码