这是我现在正在学习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)
默认情况下,equals() 比较引用:
equals类的方法Object实现了对象上最具辨别力的等价关系; 即,对于任何非空的参考值x和y,该方法返回true当且仅当x和y指代相同的对象(x == y具有值true).
由于obj1您插入到列表中的第二个对象是两个不同的对象,因此myList.contains(obj1)返回false.
要比较字段,ObjectIdName必须实现自己的equals()方法.
请注意,如果实现equals(),那么实现它也是一种很好的做法hashCode()(即使代码没有使用它).