ตัวอย่างโค้ด
import java.util.*;
public class Demo {
public static void main(String[] args) {
List myList1 = new ArrayList<>();
List myList2 = new ArrayList<>();
myList1.add(101);
myList1.add(90);
myList1.add(34);
myList2.add(34);
myList2.add(67);
myList2.add(90);
// หาค่าที่อยู่ใน list1 แต่ไม่มีใน list2 (ค่าขาดหาย)
for (int i = 0; i < myList1.size(); i++) {
if (myList2.contains(myList1.get(i)))
continue;
else
System.out.println("ค่าที่ขาดหายคือ: " + myList1.get(i));
}
// หาค่าที่อยู่ใน list2 แต่ไม่มีใน list1 (ค่าเพิ่มเติม)
for (int j = 0; j < myList2.size(); j++) {
if (myList1.contains(myList2.get(j)))
continue;
else
System.out.println("ค่าใหม่ในลิสต์คือ: " + myList2.get(j));
}
}
}
ผลลัพธ์
ค่าที่ขาดหายคือ: 101 ค่าใหม่ในลิสต์คือ: 67
คำอธิบาย
คลาส Demo มีเมธอดหลัก main และสร้าง ArrayList สองอันภายใน เมธอด add ใช้เพื่อเพิ่มสมาชิกเข้าไปในทั้งสองลิสต์
ลูป for แรกวนลูปผ่านลิสต์แรกและตรวจสอบว่าลิสต์ที่สองมีสมาชิกตัวนั้นหรือไม่ หากมีก็ข้ามไป (continue) หากไม่มี แสดงว่าเป็นค่าที่ขาดหาย จึงพิมพ์ค่านั้นออกมา
ลูป for ที่สองทำงานคล้ายกันแต่วนลูปผ่านลิสต์ที่สองเพื่อหาค่าที่เพิ่มเติม (อยู่ในลิสต์ที่สองแต่ไม่อยู่ในลิสต์แรก)
จุดสังเกต
- ใช้
Listแทน raw typeListเพื่อความปลอดภัยของชนิดข้อมูล - ใช้
Integerliteral โดยตรงแทนnew Integer("101")ซึ่งเป็นรูปแบบที่ล้าสมัย - อัลกอริทึมนี้มีความซับซ้อน O(n²) เนื่องจากใช้
containsภายในลูป สำหรับข้อมูลขนาดใหญ่ควรใช้HashSetเพื่อประสิทธิภาพที่ดีกว่า