如何将对象列表与该类型的单个对象进行比较?

kar*_*ick 1 java

这是我现在正在学习java.我只想知道是否应该编写任何比较器来比较对象列表和特定对象?而且我也想知道为什么特定的行没有比较列表

myList.contains(OBJ1)

import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class createItem {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String [] itemid = null;

        try{
            File itemFile =  new File("C:\\"+"Sano"+".xml");
            itemFile.createNewFile();

            List<ObjectIdName> myList = new ArrayList<ObjectIdName>();
            ObjectIdName obj1 = new ObjectIdName("ABC","ABC");

            myList.add(new ObjectIdName("DEF","DEF"));
            myList.add(new ObjectIdName("ABC","ABC"));
            if(myList.contains(obj1)){
                System.out.println("Has");

            }
            System.out.println("MyList:" + myList.size());

        }           
        catch(Exception e){
            e.printStackTrace();
        }
    }


}
class ObjectIdName implements Serializable{

    private static final long serialVersionUID = 1L;

    private String id;

    private String name ;

    public ObjectIdName (String id, String name) {
        this.id= id;
        this.name =name;

    }
}
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 5

默认情况下,equals() 比较引用:

equals类的方法Object实现了对象上最具辨别力的等价关系; 即,对于任何非空的参考值xy,该方法返回true当且仅当xy指代相同的对象(x == y具有值true).

由于obj1您插入到列表中的第二个对象是两个不同的对象,因此myList.contains(obj1)返回false.

要比较字段,ObjectIdName必须实现自己的equals()方法.

请注意,如果实现equals(),那么实现它也是一种很好的做法hashCode()(即使代码没有使用它).