給定兩個整數陣列:基準陣列 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)。b = Arrays.stream(b).filter(baseSet::contains).toArray(Integer[]::new);