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

โปรแกรม Java แทนที่องค์ประกอบใน List

การแทนที่องค์ประกอบใน Java List

ใช้เมธอด set(int index, E element) ของอินเทอร์เฟซ List เพื่อแทนที่องค์ประกอบที่ดัชนีระบุ คืนค่าองค์ประกอบเก่า

ไวยากรณ์

E oldValue = list.set(index, newValue);

ตัวอย่างโค้ดสมบูรณ์

import java.util.*;

public class Demo {
    public static void main(String[] args) {
        System.out.println("แพ็กเกจที่จำเป็นถูกนำเข้าแล้ว");
        
        try {
            ArrayList inputList = new ArrayList<>();
            inputList.add("Java");
            inputList.add("Scala");
            inputList.add("Mysql");
            inputList.add("Redshift");
            
            System.out.println("ลิสต์เดิม: " + inputList);
            
            // แทนที่ดัชนี 2 (องค์ประกอบที่ 3) "Mysql" → "Python"
            String oldValue = inputList.set(2, "Python");
            System.out.println("ค่าเก่าที่ถูกแทนที่: " + oldValue);
            
            System.out.println("หลังแทนที่: " + inputList);
        } catch (Exception e) {
            System.out.println("ข้อผิดพลาด: " + e);
        }
    }
}

ผลลัพธ์

แพ็กเกจที่จำเป็นถูกนำเข้าแล้ว
ลิสต์เดิม: [Java, Scala, Mysql, Redshift]
ค่าเก่าที่ถูกแทนที่: Mysql
หลังแทนที่: [Java, Scala, Python, Redshift]

ข้อยกเว้นที่อาจเกิดขึ้น

  • IndexOutOfBoundsException: ถ้า index < 0 หรือ index >= size()
  • UnsupportedOperationException: ถ้าลิสต์เป็น immutable (เช่นจาก List.of())

ตัวอย่างแบบ OOP (Encapsulation)

import java.util.*;

public class Demo {
    static void replaceElement(List list, int index, String newValue) {
        try {
            String old = list.set(index, newValue);
            System.out.println("แทนที่ดัชนี " + index + ": '" + old + "' → '" + newValue + "'");
        } catch (IndexOutOfBoundsException e) {
            System.out.println("ดัชนี " + index + " ไม่ถูกต้อง (ขนาดลิสต์: " + list.size() + ")");
        } catch (UnsupportedOperationException e) {
            System.out.println("ลิสต์นี้ไม่รองรับการแก้ไข (Immutable)");
        }
    }
    
    public static void main(String[] args) {
        List list = new ArrayList<>(Arrays.asList("Java", "Scala", "Mysql", "Redshift"));
        System.out.println("ต้นฉบับ: " + list);
        
        replaceElement(list, 2, "Python");
        System.out.println("หลังแทนที่: " + list);
        
        // ทดสอบข้อผิดพลาด
        replaceElement(list, 10, "Test"); // IndexOutOfBounds
        replaceElement(List.of("A", "B"), 0, "C"); // UnsupportedOperation
    }
}

การแทนที่หลายตำแหน่งพร้อมกัน

// แทนที่ทุก "Mysql" เป็น "PostgreSQL"
for (int i = 0; i < list.size(); i++) {
    if (list.get(i).equals("Mysql")) {
        list.set(i, "PostgreSQL");
    }
}

// หรือใช้ replaceAll (Java 8+)
list.replaceAll(s -> s.equals("Mysql") ? "PostgreSQL" : s);

ข้อสังเกต

  • set() เปลี่ยนค่าที่ดัชนีนั้นๆ โดยไม่เปลี่ยนขนาดลิสต์
  • ต่างจาก add(index, element) ที่แทรกและขยายขนาดลิสต์
  • ทำงานกับ ArrayList, LinkedList, Vector ได้ทุกตัว
  • สำหรับลิสต์ Immutable (List.of) ต้องสร้างลิสต์ใหม่แทน