首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 陣列比較:以基準陣列為準過濾目標陣列

     編輯:程式設計疑難解答

問題描述

給定兩個整數陣列:基準陣列 a = {1, 2, 3},目標陣列 b 可能為 {1, 2, 3, 4} 或 {1, 4}。需以陣列 a 為準,移除陣列 b 中不存在於 a 的元素(如數字 4),最終使 b 僅保留與 a 交集的部分。這在實際開發中常用於:將資料庫查詢的字串轉為陣列,與前端輸入的字串陣列比對,以介面端資料為準進行過濾。

核心邏輯

將基準陣列 a 轉為 List 以利用 contains 快速查找。遍歷目標陣列 b,僅保留存在於 a 的元素,最後轉回陣列。同樣處理另一組目標陣列 c。

程式碼實作

import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;

public class ArrayFilterDemo {
    public static void main(String[] args) {
        Integer[] a = {1, 2, 3};
        Integer[] b = {1, 2, 3, 4};
        Integer[] c = {1, 4};

        List<Integer> baseList = Arrays.asList(a);
        List<Integer> filteredB = new ArrayList<>();
        List<Integer> filteredC = new ArrayList<>();

        // 過濾陣列 b
        for (Integer num : b) {
            if (baseList.contains(num)) {
                filteredB.add(num);
            }
        }
        b = filteredB.toArray(new Integer[0]);
        System.out.println("過濾後的 b: " + Arrays.toString(b));

        // 過濾陣列 c
        for (Integer num : c) {
            if (baseList.contains(num)) {
                filteredC.add(num);
            }
        }
        c = filteredC.toArray(new Integer[0]);
        System.out.println("過濾後的 c: " + Arrays.toString(c));
    }
}

輸出結果

過濾後的 b: [1, 2, 3]
過濾後的 c: [1]

優化建議

  • 若資料量大,建議將基準陣列轉為 HashSet,查找時間複雜度從 O(n) 降為 O(1)。
  • Java 8+ 可使用 Stream API 一行完成:b = Arrays.stream(b).filter(baseSet::contains).toArray(Integer[]::new);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved