需求:給定 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<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 版本。