检查 ArrayList<int[]> 是否包含忽略的相同数组顺序
Check if ArrayList<int[]> Contains same array order ignored
我已经初始化了一个包含 int 数组的 ArrayList:
ArrayList<int[]> holder = new ArrayList<int[]>();
如果我像这样添加一个 int[]:
int[] first = {1, 2, 3};
holder.add(first);
如果我进行此检查,我希望函数 return 为真,但现在 return 为假
int[] second = {2, 1, 3};
if(holder.contains(second)) return true;
else return false
你不能用ArrayList#Contains
来判断,因为int[]
没有特殊的equals
。您可以迭代列表然后比较:
private static boolean contains(ArrayList<int[]> holder, int[] arr) {
for (int[] item : holder) {
if (equals(item, arr)) {
return true;
}
}
return false;
}
// from
private static boolean equals(int[] arr1, int[] arr2) {
int[] copyOfArr1 = Arrays.copyOf(arr1, arr1.length);
int[] copyOfArr2 = Arrays.copyOf(arr2, arr2.length);
Arrays.sort(copyOfArr1);
Arrays.sort(copyOfArr2);
return Arrays.equals(copyOfArr1, copyOfArr2);
}
我已经初始化了一个包含 int 数组的 ArrayList:
ArrayList<int[]> holder = new ArrayList<int[]>();
如果我像这样添加一个 int[]:
int[] first = {1, 2, 3};
holder.add(first);
如果我进行此检查,我希望函数 return 为真,但现在 return 为假
int[] second = {2, 1, 3};
if(holder.contains(second)) return true;
else return false
你不能用ArrayList#Contains
来判断,因为int[]
没有特殊的equals
。您可以迭代列表然后比较:
private static boolean contains(ArrayList<int[]> holder, int[] arr) {
for (int[] item : holder) {
if (equals(item, arr)) {
return true;
}
}
return false;
}
// from
private static boolean equals(int[] arr1, int[] arr2) {
int[] copyOfArr1 = Arrays.copyOf(arr1, arr1.length);
int[] copyOfArr2 = Arrays.copyOf(arr2, arr2.length);
Arrays.sort(copyOfArr1);
Arrays.sort(copyOfArr2);
return Arrays.equals(copyOfArr1, copyOfArr2);
}