检查一个数组中的所有元素是否包含在另一个数组中

时间:2017-03-02 02:12:37

标签: java arrays

给定两个数字列表(称为listA和listB),我需要编写一个Java方法 返回一个布尔值来声明是否所有元素都在 listA包含在listB中。

我无法完全使用我的代码,因为它似乎总是返回false。

ng-hide

3 个答案:

答案 0 :(得分:1)

找到其他元素后,您无法将containsAll设置为false。如果没有元素匹配,那么这是唯一的错误,在内部循环完成之前您不知道。这是一个简单的实现:

public static boolean containsAll(int[] listA, int[] listB) {
    outer:
    for (int a : listA) {
        for (int b : listB) {
            if (a == b) {
                continue outer;
            }
        }
        return false;
    }
    return true;
}

或者如果你不喜欢gotos:

public static boolean containsAll(int[] listA, int[] listB) {
    for (int a : listA) {
        if (!contains(listB, a)) {
            return false;
        }
    }
    return true;
}

private static boolean contains(int[] list, int i) {
    for (int e : list) {
        if (e == i) {
            return true;
        }
    }
    return false;
}

答案 1 :(得分:0)

您可以从int []初始化HashSet,然后通过调用containsAll来检查数组是否包含所有元素

public static boolean containsAll(int[] listA, int[] listB){
       Set<Integer> a = Arrays.stream(listA).boxed().collect(Collectors.toSet());
       Set<Integer> b = Arrays.stream(listB).boxed().collect(Collectors.toSet());
        return a.containsAll(b);
        }

答案 2 :(得分:0)

一个简单的方法是将每个数组转换为Set,然后使用Set#retainAll来确定相等。

int[] a = {1, 2, 3, 4, 5};
int[] b = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

Set<Integer> A = Arrays.stream(a).boxed().collect(Collectors.toSet());
Set<Integer> B = Arrays.stream(b).boxed().collect(Collectors.toSet());

System.out.println(B.containsAll(A));

如果A中的每个元素都在B中,则会打印true,否则为false

感谢shmosel推荐Set#containsAll