直接用 `Arrays.equals(arr1, arr2)` 需順序一致。若只關心元素內容是否相同(忽略順序),最簡單做法是複製陣列 → 排序 → 比較。
import java.util.Arrays;
public class ArrayContentEquals {
public static void main(String[] args) {
String[] a1 = {"1", "2", "3"};
String[] a2 = {"3", "2", "1"};
Arrays.sort(a1); // 就地排序,會改變原陣列
Arrays.sort(a2);
if (Arrays.equals(a1, a2)) {
System.out.println("元素內容相同");
} else {
System.out.println("元素內容不同");
}
}
}
import java.util.Arrays;
public class ArrayUtils {
/** 比較兩個陣列是否包含相同元素 (忽略順序、允許重複) */
public static > boolean contentEquals(T[] a, T[] b) {
if (a == b) return true;
if (a == null || b == null) return false;
if (a.length != b.length) return false;
T[] ca = Arrays.copyOf(a, a.length);
T[] cb = Arrays.copyOf(b, b.length);
Arrays.sort(ca);
Arrays.sort(cb);
return Arrays.equals(ca, cb);
}
/** 基本型別版 (int[]) */
public static boolean contentEquals(int[] a, int[] b) {
if (a == b) return true;
if (a == null || b == null) return false;
if (a.length != b.length) return false;
int[] ca = Arrays.copyOf(a, a.length);
int[] cb = Arrays.copyOf(b, b.length);
Arrays.sort(ca);
Arrays.sort(cb);
return Arrays.equals(ca, cb);
}
}
| 方法 | 時間複雜度 | 空間 | 適用場景 |
|---|---|---|---|
| 排序 + Arrays.equals | O(n log n) | O(n) | 通用、元素可比較、陣列較小 |
| HashMap 計數 | O(n) | O(n) | 大陣列、元素不可比較但可哈希 |
| List.containsAll + size | O(n²) | O(n) | 極小陣列、原型驗證 |