现在正在学习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;
}
}
答案 0 :(得分:5)
默认情况下,equals()
compares the references:
类
equals
的{{1}}方法实现了对象上最具辨别力的等价关系;也就是说,对于任何非空引用值Object
和x
,当且仅当y
和true
引用同一对象时,此方法才会返回x
(y
的值为x == y
)。
由于true
和您在列表中插入的第二个对象是两个不同的对象,obj1
会返回myList.contains(obj1)
。
要比较字段,false
必须implements its own equals()
method。
请注意,如果您实施ObjectIdName
,那么实施equals()
也是一种很好的做法(即使您的代码未使用它)。