簡體   English   中英

如果第一個數組中的所有項目都出現在第二個數組中,則返回true

[英]Return true if all items in the first array occurs in the second array

我有一個通用的方法

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中。

我該如何解決這個問題?

這是使用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();
}

一種方法是使用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM