Để xóa một đoạn liên tiếp trong ArrayList, có 2 phương pháp chính:
Cách 1: subList() + clear() – Khuyên dùng
subList(from, to) trả về view của đoạn [from, to), gọi clear() trên view sẽ xóa khỏi list gốc.
import java.util.ArrayList;
public class RemoveSubListDemo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>(
Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H")
);
System.out.println("Trước: " + list);
// Xóa từ index 2 đến 5 (C, D, E, F)
list.subList(2, 6).clear();
System.out.println("Sau: " + list);
}
}
Kết quả
Trước: [A, B, C, D, E, F, G, H]
Sau: [A, B, G, H]
Cách 2: removeRange() – Chỉ dùng trong subclass
removeRange() là protected của AbstractList, chỉ truy cập được khi extends ArrayList.
class MyList<E> extends ArrayList<E> {
public void removeRangePublic(int from, int to) {
super.removeRange(from, to); // gọi protected method
}
}
// Sử dụng:
MyList<String> list = new MyList<>();
list.addAll(Arrays.asList("A","B","C","D","E","F","G","H"));
list.removeRangePublic(2, 6); // xóa C,D,E,F
So sánh
| Tiêu chí | subList().clear() | removeRange() |
|---|---|---|
| Cần extends? | Không | Có |
| Hiệu năng | Tốt (dịch chuyển 1 lần) | Tốt (internal) |
| An toàn | View có thể invalid nếu sửa list gốc khi đang iterate | An toàn hơn |
Khuyến nghị: Dùng subList(from, to).clear() cho code thông thường.