我遇到了以下问题。我做了一些研究,但找不到令人满意的答案,所以如果这是重复的,请随意指出我正确的方向。谢谢。
假设我有一个CustomClass A.只有2个参数,没什么特别的,没有覆盖等号方法。
A inst1 = new A(5,3);
A inst2 = new A(6,7);
A inst3 = new A(3,5);
这会创建3个A实例,所有实例都不同。 现在我把它们放在两个数组中:
A[] arr1 = new A[3];
arr1[0] = inst1;
arr1[1] = inst2;
arr1[2] = inst3;
A[] arr2 = new A[3];
arr2[0] = inst1;
arr2[1] = inst2;
arr2[2] = inst3;
如果我现在创建一个ArrayList并添加arr1
ArrayList<A[]> arraylist = new ArrayList<>();
arraylist.add(arr1)
我希望arraylist包含arr2。
arraylist.contains(arr2) //returns false
我编写了一个自定义方法来检查,但由于ArrayList.contains调用了相等的方法,我假设有一种更优雅的方式。我发现,你不能覆盖数组的等于方法。
自定义方法:
private boolean listContainsAArray(ArrayList<A[]> list, A[] arr){
int listsize = list.size();
for(int i=0;i<listsize;i++){
A[] listelement = list.get(i);
if((listelement[0]==arr[0])&(listelement[1]==arr[1])&(listelement[2]==arr[2])){
return true;
}
}
return false;
}