Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

โปรแกรม Java หาค่าที่ขาดหายและค่าเพิ่มเติมในสองลิสต์

ตัวอย่างโค้ด

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 type List เพื่อความปลอดภัยของชนิดข้อมูล
  • ใช้ Integer literal โดยตรงแทน new Integer("101") ซึ่งเป็นรูปแบบที่ล้าสมัย
  • อัลกอริทึมนี้มีความซับซ้อน O(n²) เนื่องจากใช้ contains ภายในลูป สำหรับข้อมูลขนาดใหญ่ควรใช้ HashSet เพื่อประสิทธิภาพที่ดีกว่า