Lớp ArrayList trong Java

1. Khái niệm Collection

Collection là container lưu trữ dữ liệu tương tự mảng. Khác biệt chính: kích thước mảng cố định khi khởi tạo, trong khi ArrayList có thể thay đổi kích thước linh hoạt.

2. Gói thư viện

Lớp ArrayList nằm trong gói java.util

3. Phương thức khởi tạo

Phương thứcMô tả
ArrayList()Tạo danh sách rỗng với dung lượng mặc định 10 phần tử
ArrayList(int capacity)Tạo danh sách rỗng với dung lượng chỉ định
ArrayList(Collection c)Tạo danh sách từ các phần tử của collection khác

4. Phương thức thường dùng

Phương thứcChức năng
add(E item)Thêm phần tử vào cuối danh sách
add(int index, E item)Chèn phần tử tại vị trí xác định
get(int index)Lấy phần tử tại vị trí chỉ định
size()Trả về số lượng phần tử
remove(int index)Xóa phần tử tại vị trí và trả về giá trị đã xóa
remove(Object obj)Xóa phần tử đầu tiên trùng khớp, trả về kết quả boolean
set(int index, E item)Thay thế phần tử tại vị trí chỉ định
public static void main(String[] args) {
    ArrayList<String> heroes = new ArrayList<>();
    heroes.add("Ashe");
    heroes.add("Yasuo");
    System.out.println(heroes); // [Ashe, Yasuo]
    
    // Duyệt danh sách
    for(int i = 0; i < heroes.size(); i++) {
        System.out.println(heroes.get(i));
    }
    
    heroes.add(1, "Zed");
    System.out.println(heroes.get(2)); // Yasuo
    System.out.println(heroes.remove(0)); // Ashe
    System.out.println(heroes.set(1, "Lee Sin")); // Yasuo
}

5. Lưu ý quan trọng

(1) Kiểu generic <E> xác định loại phần tử trong ArrayList, chỉ chấp nhận kiểu tham chiếu

(2) Khi in ArrayList, kết quả hiển thị nội dung thay vì địa chỉ bộ nhớ

(3) Để lưu trữ kiểu nguyên thủy, sử dụng lớp wrapper tương ứng:

Kiểu nguyên thủyLớp Wrapper
intInteger
doubleDouble
charCharacter
booleanBoolean

Từ JDK 1.5+, Java hỗ trợ auto-boxing (tự động chuyển kiểu nguyên thủy thành wrapper) và auto-unboxing (thực hiện ngược lại).

(4) Lỗi thường gặp khi xóa phần tử trong vòng lặp:

ArrayList<String> data = new ArrayList<>();
data.add("A*");
data.add("Valid");
data.add("*B");
data.add("C*");

// Cách 1: Giảm chỉ số sau khi xóa
for(int i = 0; i < data.size(); i++) {
    if(data.get(i).contains("*")) {
        data.remove(i);
        i--; 
    }
}

// Cách 2: Duyệt từ cuối danh sách
for(int i = data.size()-1; i >= 0; i--) {
    if(data.get(i).contains("*")) {
        data.remove(i);
    }
}

Thẻ: Java ArrayList Generics Collections Wrapper Classes

Đăng vào ngày 11 tháng 6 lúc 02:14