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

วิธีลบ SubList จาก ArrayList ใน Java

วิธีที่ 1: ใช้ subList() และ clear()

เมธอด subList(int fromIndex, int toIndex) คืนค่า view ของลิสต์ในช่วงที่ระบุ (fromIndex รวม, toIndex ไม่รวม) เมธอด clear() ลบข้อมูลทั้งหมดจากลิสต์ ดังนั้นการเรียก list.subList(from, to).clear() จะลบ sublist นั้นออกไป

ตัวอย่าง

import java.util.ArrayList;

public class RemovingSubList {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("JavaFX");
        list.add("Java");
        list.add("WebGL");
        list.add("OpenCV");
        list.add("OpenNLP");
        list.add("JOGL");
        list.add("Hadoop");
        list.add("HBase");
        list.add("Flume");
        list.add("Mahout");
        list.add("Impala");
        
        System.out.println("Before: " + list);
        list.subList(4, 9).clear(); // ลบ index 4-8 (OpenNLP ถึง Flume)
        System.out.println("After: " + list);
    }
}

ผลลัพธ์

Before: [JavaFX, Java, WebGL, OpenCV, OpenNLP, JOGL, Hadoop, HBase, Flume, Mahout, Impala]
After: [JavaFX, Java, WebGL, OpenCV, Mahout, Impala]

วิธีที่ 2: ใช้ removeRange() (protected method)

removeRange(int fromIndex, int toIndex) เป็นเมธอด protected ของ AbstractList ต้องสร้างคลาสย่อย (extends ArrayList) เพื่อเข้าถึงได้

ตัวอย่าง

import java.util.ArrayList;

public class RemovingSubList extends ArrayList<String> {
    public static void main(String[] args) {
        RemovingSubList list = new RemovingSubList();
        list.add("JavaFX");
        list.add("Java");
        list.add("WebGL");
        list.add("OpenCV");
        list.add("OpenNLP");
        list.add("JOGL");
        list.add("Hadoop");
        list.add("HBase");
        list.add("Flume");
        list.add("Mahout");
        list.add("Impala");
        
        System.out.println("Before: " + list);
        list.removeRange(4, 9); // ลบ index 4-8
        System.out.println("After: " + list);
    }
}

ผลลัพธ์

Before: [JavaFX, Java, WebGL, OpenCV, OpenNLP, JOGL, Hadoop, HBase, Flume, Mahout, Impala]
After: [JavaFX, Java, WebGL, OpenCV, Mahout, Impala]

การเปรียบเทียบ

วิธีความง่ายต้อง Extendsประสิทธิภาพ
subList().clear()สูงไม่ดี
removeRange()ต่ำใช่ดีกว่าเล็กน้อย (internal)

ข้อแนะนำ

ใช้ subList(from, to).clear() เป็นหลัก เพราะใช้ง่าย ไม่ต้องสร้าง subclass และเป็น API มาตรฐานของ List interface