有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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?

如果没有,有人能说出什么样的案例列表吗。等于(c)将返回true。因为一个项目可以有很多属性,id、名称、价格。它是否检查引用名称?或者比较属性


共 (3) 个答案

  1. # 1 楼答案

    不,它将返回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;
        ...
    }
    
  2. # 2 楼答案

    来自sun的文档,关于相等

    查克这里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方法在列表接口的不同实现中正常工作

  3. # 3 楼答案

    首先,您必须使用contains方法,而不是equalsContains检查列表中是否有项目。但是equals检查一个列表是否等于另一个列表

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