我有两个arrayLists<myObject>
,其中myObject
是我创建的自定义类的对象。我希望能够使用equals()
方法比较这些arrayLists。
在阅读并寻找答案之后,我已经读过int[]
等某些对象在引用相同内容时仅被equals()
方法视为相等。
为了解决这个问题,我尝试覆盖自定义对象中的equals方法。我的对象有3个属性(所有基本类型),所以我的equals方法现在返回true
如果所有3个属性都等于被比较对象的属性,否则返回false。但是,比较arraylists仍然不起作用。我做错了什么?
请原谅我解释代码而不是发布代码,我这样做是因为变量和名称不是英文。
编辑:好的,这是代码。 Compra
是我的自定义类; cantidad
,concepto
和id
是其属性。
@Override
public boolean equals(Object obj) {
boolean result = true;
if (obj == null) {
result = false;
}else{
Compra comprobada = (Compra) obj;
if(!(this.id == comprobada.getId())){
result = false;
}
if(!(this.cantidad == comprobada.getCantidad())){
result = false;
} if(!this.concepto.equals(comprobada.getConcepto())){
result = false;
}
}
return result;
}
答案 0 :(得分:1)
基于这个: How can I check if two ArrayList differ, I don't care what's changed
如果你已经实现了自定义对象等于正确(你实际上覆盖它并拥有你的)并且arrayList的大小是相同的,并且每对对象都相等,那么它将返回相等。换句话说,你要做的事情是完全正确的,但你的数组列表实际上并没有完全相同的对象确切的顺序。
通过执行System.out.println()调查正在进行的操作,确保在检查集合相等性时调用了equal。 如果你不介意,请发送你的对象的平等。
我在一个孤立的例子中运行你的代码并且工作正常(outtputs为true) - 我改进了equals方法,所以如果检查好像只有其中一个不相等就应该返回false。
class stackoverflow {
public static void main(String args[]){
ArrayList<Compra> array1 = new ArrayList<>();
ArrayList<Compra> array2 = new ArrayList<>();
array1.add(new Compra(1,2,"test"));
array2.add(new Compra(1,2,"test"));
System.out.println(array1.equals(array2));
}
}
class Compra {
int id;
int cantidad;
String concepto;
public Compra(int id, int cantidad, String concepto){
this.id = id;
this.cantidad = cantidad;
this.concepto = concepto;
}
public boolean equals(Object obj) {
if (obj == null) {
return false;
}else{
Compra comprobada = (Compra) obj;
if(!(this.id == comprobada.getId())){
return false;
}
if(!(this.cantidad == comprobada.getCantidad())){
return false;
}
if(!this.concepto.equals(comprobada.getConcepto())){
return false;
}
}
return true;
}
public int getId() {
return id;
}
public int getCantidad() {
return cantidad;
}
public String getConcepto() {
return concepto;
}
}
要检查的一些事项:
答案 1 :(得分:0)
由于您尚未发布代码,我建议您查看Comparable class和方法compareTo
以及如何将其用于自定义类。