给定两个数字列表(称为listA和listB),我需要编写一个Java方法 返回一个布尔值来声明是否所有元素都在 listA包含在listB中。
我无法完全使用我的代码,因为它似乎总是返回false。
ng-hide
答案 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
!