我正在编写一个简单的方法来将对象添加到ArrayList中,如果该对象尚未包含该对象。我正在使用.contains方法,但是由于某种原因,当我将对象的副本添加到ArrayList时,即使我已经将相同的对象添加到ArrayList中,.contains方法也会返回false。这是代码:
主要方法,
输出
城市等级
旅行类
感谢您的帮助!
您需要在equals
中覆盖class City
方法。您可以按如下操作:
@Override
public boolean equals(Object obj) {
City other = (City) obj;
return Objects.equals(name, other.name) && Objects.equals(country, other.country);
}
为了使contains()
正常工作,您必须重写类中的equals()
和hashCode()
方法。如果您不这样做,则相等性的基础是所引用的对象是相同的。
例如:
City c1 = new City("London", "UK") ;
City c2 = new City("London", "UK") ;
System.out.println(c1.equals(c2)) ; // prints false
c2 = c1 ;
System.out.println(c1.equals(c2)) ; // prints true
编辑:要覆盖equals()
方法,请参见Arvind Kumar Avinash的答案。