首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 比較兩個陣列元素是否相同 (忽略順序)

     編輯:Java 相關知識

Java 陣列內容比較:排序後用 Arrays.equals

直接用 `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);
    }
}

效能與替代方案

HashMap 計數版 (O(n))

import java.util.HashMap;
import java.util.Map;

public static  boolean contentEqualsHash(T[] a, T[] b) {
    if (a == b) return true;
    if (a == null || b == null || a.length != b.length) return false;

    Map map = new HashMap<>();
    for (T x : a) map.merge(x, 1, Integer::sum);
    for (T x : b) {
        Integer cnt = map.get(x);
        if (cnt == null || cnt == 0) return false;
        map.put(x, cnt - 1);
    }
    return true; // 所有計數歸零
}

注意事項

  • 重複元素:上述方法皆正確處理重複元素(計數必須一致)。
  • null 元素:`HashMap` 允許 `null` key,`Arrays.sort` 會拋 `NullPointerException`,需先過濾或用 `Comparator.nullsFirst`。
  • 基本型別:需分別寫 `int[]`、`long[]` 等版本,或用 Guava `Ints.toArray` 轉箱後通用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方法時間複雜度空間適用場景
排序 + Arrays.equalsO(n log n)O(n)通用、元素可比較、陣列較小
HashMap 計數O(n)O(n)大陣列、元素不可比較但可哈希
List.containsAll + sizeO(n²)O(n)極小陣列、原型驗證