วิธีที่ 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