2012-01-27 34 views
1

這是我正在學習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; 

    } 
} 

回答

5

默認情況下,equals()compares the references

Objectequals方法實現對象上最可能的等價關係;也就是說,對於任何非空引用值xy,此方法返回true當且僅當xy指代相同的對象(x == y具有值true)。

由於obj1和你插入到列表中的第二個對象是兩個不同的對象,myList.contains(obj1)回報false

要比較的字段,ObjectIdName已到implements its own equals() method

請注意,如果您實施equals(),實施hashCode()(即使它未被您的代碼使用)也是一種很好的做法。