我有一个通用的方法
public static <T> boolean lessThanOrEqualTo(T[] arr1, T[] arr2) {
for(int i = 0; i < arr1.length; i++) {
T current = arr1[i];
boolean[] track = new boolean[arr2.length];
for(int j = 0; j < arr2.length; j++) {
track[j] = current.equals(arr2[j]);
if(j == arr2.length-1) {
for(int k = 0; k < track.length; k++) {
if(track[k] == true) {
System.out.println(Arrays.toString(track));
return true;
}
}
}
}
System.out.println(Arrays.toString(track));
}
return false
}
如果 arr1 中的每个项目都在 arr2 中,我必须返回true。
示例:
lessThanOrEqualTo({ "Bill", "Mark", "Bill", "Mark", "Bill"},
{"Bill", "Alex", "Mark"});
返回true,因为arr1的每个项都在arr2中。
我该如何解决这个问题?
答案 0 :(得分:1)
以下是使用Set
的解决方案public static <T> boolean lessThanOrEqualTo(T[] arr1, T[] arr2) {
Set<T> a = new HashSet<>(Arrays.asList(arr1));
Set<T> b = new HashSet<>(Arrays.asList(arr2));
a.removeAll(b);
return a.isEmpty();
}
答案 1 :(得分:0)
这样做的一种方法是使用Set
。
就速度而言,它可能更慢,但更容易理解。
public static <T> boolean lessThanOrEqualTo(T[] arr1, T[] arr2) {
Set<T> firstSet=new HashSet<T>(Arrays.asList(arr1));
Set<T> secondSet=new HashSet<T>(Arrays.asList(arr2));
int countOfFirst=firstSet.size();
firstSet.retainAll(secondSet);
return firstSet.size() == countOfFirst;
}