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

时间:2012-01-27 12:52:58

标签: 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;

    }
}

1 个答案:

答案 0 :(得分:5)

默认情况下,equals() compares the references

  

equals的{​​{1}}方法实现了对象上最具辨别力的等价关系;也就是说,对于任何非空引用值Objectx,当且仅当ytrue引用同一对象时,此方法才会返回xy的值为x == y)。

由于true和您在列表中插入的第二个对象是两个不同的对象,obj1会返回myList.contains(obj1)

要比较字段,false必须implements its own equals() method

请注意,如果您实施ObjectIdName,那么实施equals()也是一种很好的做法(即使您的代码未使用它)。