当我使用ArrayList
时 ArrayList<item> List = new ArrayList<item>();
Item a = new Item(1,"Book");
Item b = new Item(2,"Shoes");
List.add(a);
List.add(b);
Item c = new Item(1,"Book");
if(List.equals(c)) //Will this code return true?
如果没有,任何人都可以告诉List.equals(c)将返回true。因为一个项目可以有许多属性,id,name,price。它检查参考名称吗?或比较属性。
答案 0 :(得分:3)
首先,您必须使用contains
方法而不是equals
。 Contains
检查项目是否在列表中。但equals
检查列表是否等于另一个列表。
现在回答你的问题 - Contains将寻找equals方法的实现(继承自Object
的方法)。默认情况下它会比较引用。如果要比较属性,请覆盖它以使用自定义比较逻辑。
答案 1 :(得分:1)
来自sun的关于平等的文档。
chack here http://download.oracle.com/javase/1.4.2/docs/api/java/util/List.html#equals(java.lang.Object)
将指定对象与此列表进行比较以获得相等性。当且仅当指定的对象也是列表时,返回true,两个列表具有相同的大小,并且两个列表中的所有对应元素对都相等。 (如果(e1 == null?e2 == null:e1.equals(e2)),则两个元素e1和e2相等。)换句话说,如果两个列表包含相同顺序的相同元素,则它们被定义为相等。此定义确保equals方法在List接口的不同实现中正常工作。
答案 2 :(得分:1)
不,它会返回false,因为c与list不相等。 Equals意味着等于:)所以你想使用contains方法:
list.contains(c);
更多细节:在java源代码中,您可以在ArrayList上调用它时找到完全相同的含义:
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof List)) // your object IS NOT instanceof with List interface
return false;
...
}