Java中的ArrayList对象

Java中的ArrayList对象,java,arraylist,Java,Arraylist,当我使用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? Ar

当我使用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?
ArrayList List=new ArrayList();
项目a=新项目(1,“账簿”);
b项=新项目(2,“鞋”);
列表.添加(a);
列表.添加(b);
项目c=新项目(1,“账簿”);
if(List.equals(c))//这段代码会返回true吗?

如果不是,谁能告诉我在什么情况下,equals(c)将返回true。因为一个项目可以有很多属性,id、名称、价格。它是否检查引用名称?或者比较属性。

首先,必须使用
包含
方法而不是
等于
<代码>包含检查列表中是否有项目。但是
equals
检查一个列表是否等于另一个列表


现在回答您的问题-Contains将查找equals方法的实现(从
对象继承的方法)。默认情况下,它比较引用。如果要比较属性,请重写它以使用自定义比较逻辑。

首先,必须使用
contains
方法not
equals
<代码>包含检查列表中是否有项目。但是
equals
检查一个列表是否等于另一个列表


现在回答您的问题-Contains将查找equals方法的实现(从
对象继承的方法)。默认情况下,它比较引用。如果要比较属性,请覆盖它以使用自定义比较逻辑。

来自sun的doc about equals

查克(这里)


比较指定对象与此列表是否相等。当且仅当指定对象也是列表、两个列表的大小相同且两个列表中所有对应的元素对相等时,返回true。(如果(e1==null?e2==null:e1.equals(e2)),则两个元素e1和e2是相等的。)换句话说,如果两个列表以相同的顺序包含相同的元素,则将它们定义为相等。此定义确保equals方法在列表接口的不同实现中正常工作。

来自sun的关于equals的文档

查克(这里)


比较指定对象与此列表是否相等。当且仅当指定对象也是列表、两个列表的大小相同且两个列表中所有对应的元素对相等时,返回true。(如果(e1==null?e2==null:e1.equals(e2)),则两个元素e1和e2是相等的。)换句话说,如果两个列表以相同的顺序包含相同的元素,则将它们定义为相等。此定义确保equals方法在列表接口的不同实现中正常工作。

否,它将返回false,因为c与List不相等。Equals表示等于:),所以您要使用contain方法:

list.contains(c);
更多详细信息:在java source中,当您在ArrayList上调用它时,您可以找到确切的equals含义:

public boolean equals(Object o) {
    if (o == this)
        return true;
    if (!(o instanceof List)) // your object IS NOT instanceof with List interface
        return false;
    ...
}

不,它将返回false,因为c与list不相等。Equals表示等于:),所以您要使用contain方法:

list.contains(c);
更多详细信息:在java source中,当您在ArrayList上调用它时,您可以找到确切的equals含义:

public boolean equals(Object o) {
    if (o == this)
        return true;
    if (!(o instanceof List)) // your object IS NOT instanceof with List interface
        return false;
    ...
}

你在Java世界,所以在空闲时间看看Java命名约定是的,我对此有很多评论。。我会做的,因为你在Java世界,所以在空闲时间看看Java命名约定是的,我对此有很多评论。。我会这样做