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

Java 雙層迴圈比對 List 與陣列:輸出差異元素的正確寫法

     編輯:程式設計疑難解答

需求:給定 String[] arr 與 List<String> list,找出 僅存在於 list 不存在於 arr 的元素。初學者常寫雙層迴圈卻輸出大量重複「不相同」。

錯誤邏輯

for (String s : list) {
    for (String a : arr) {
        if (a.equals(s)) print("相同");
        else print("不相同:" + s); // 錯:每次比對不等就印,導致大量重複
    }
}

正確演算法:旗標法

for (String s : list) {
    boolean found = false;
    for (String a : arr) {
        if (a.equals(s)) { found = true; break; }
    }
    if (!found) System.out.println("不相同:" + s);
}

進階:使用 Set O(1) 查找

Set<String> set = new HashSet<>(Arrays.asList(arr));
for (String s : list) {
    if (!set.contains(s)) System.out.println("不相同:" + s);
}

Set 解法時間複雜度從 O(m×n) 降為 O(m+n),資料量大時效能差異顯著。面試建議先寫旗標法展示邏輯,再優化為 Set 版本。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved