首页 > 解决方案 > 检查是否列表包含给定的 int[]

问题描述

如何检查 an 是否ArrayList<int[]>包含给定数组 [x, y]?我在 c# 中找到了相同的问题,但找不到 java 的任何答案。

目前我正在使用myList.contains(myArray)但它总是评估为假,我假设与 C# 中的原因类似。C# 中的解决方案是使用 LINQ,在 java 中不存在。

有没有另一种方法可以做到这一点,或者我必须编写自己的子程序来提取每个列表元素的值并手动比较它们?


编辑:我已经编写了自己的子程序来执行此操作(假设每个数组都有两个元素),但更优雅的解决方案将不胜感激

private boolean contains(List<int[]> list, int[] array) {
    for (int[] listItem : list) {
        if (listItem[0] == array[0] &&
           listItem[1] == array[1]) {
            return true;
        }
    }
    return false;

标签: javaarraylist

解决方案


.contains方法比较每个对象.equals,正如这个答案所指出的,它只是比较数组对象的身份(即检查它们是否是同一个 Java 对象),它不比较数组的内容。

您需要做的是编写一个 for 循环,检查每个元素Arrays.equals(..)(比较数组的内容)。例如:

boolean found = false;
for (int i = 0; i < myList.size(); i++)
    if (Arrays.equals(myArray, myList.get(i)) found = true;

推荐阅读