我知道这有点令人困惑,但我基本上想检查整数数组的arrayList是否包含数组?我添加了一个更有意义的代码。
我正在尝试以下代码。但是.contains方法在检查数组时似乎不起作用。另一种方法非常有用。
int[] data = {1, 2};
int[] data2 = {3, 4};
int[] dataCheck = {1, 2};
ArrayList<int[]> megaData = new ArrayList<int[]>();
megaData.add(data);
megaData.add(data2);
if (megaData.contains(dataCheck)) {
System.out.println("A copy has been found");
} else {
System.out.println("No copy found");
}
答案 0 :(得分:2)
contains
在这种情况下不起作用,因为数组的equals
- 方法只检查数组对象是否相同,而不是它们是否具有相同的元素(cp。{{3 }})。 contains
使用equals
。
我的建议是仅使用Lists
而不是数组。 List
有一个equals
- 方法,用于比较列表的元素。必须为此更改代码的第一行:
List<Integer> data = Arrays.asList(1,2);
List<Integer> data2 = Arrays.asList(3,4);
List<Integer> dataCheck = Arrays.asList(1,2);
List<List<Integer>> megaData= new ArrayList<List<Integer>>();
Arrays.asList
是一种使用固定元素创建列表的简便方法。 List
通常仅使用接口List
声明,而不是像ArrayList
这样的实现类声明。这样可以在以后的某个时间点轻松使用其他List
实现。
答案 1 :(得分:0)
那可能是:
boolean contains = false;
for (int[] element : megaData) { // iterating over the list
if (Arrays.equals(element, dataCheck)) {
contains = true;
break;
}
}
if (contains) {
System.out.println("A copy has been found");
} else {
System.out.println("No copy found");
}
或者,您可以为此编写一个方法:
public boolean containsArray(ArrayList<int[]> listOfArrays, int[] array) {
for (int[] element : listOfArrays) {
if (Arrays.equals(element, array)) {
return true;
}
}
return false;
}