我有一个arrayList,其中每个元素是一个长度为整数的数组。我如何在这里使用.contains方法?

时间:2016-09-18 14:39:23

标签: java arrays arraylist

我知道这有点令人困惑,但我基本上想检查整数数组的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");
}

2 个答案:

答案 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;
}