Trong nội dung này, chúng ta cùng làm quen với danh sách mảng đã được định nghĩa sẵn với lớp ArrayList trong gói java.util.

Danh sách mảng khác với mảng cơ bản là nó có thể thay đổi kích thước tùy theo số lượng phần tử mà chúng ta thêm vào hoặc xóa đi. Cú pháp để khởi tạo một danh sách mảng như sau:

ArrayList<kiểu đối tượng> <tên đối tượng> = new ArrayList<kiểu đối tượng>();

Lưu ý <kiểu đối tượng> chỉ chấp nhận các đối tượng chứ không chấp nhận các kiểu dữ liệu cơ bản là int, float, char, double, ... Java cũng đã cung cấp sẵn các lớp bao đóng tương ứng với các kiểu dữ liệu này trong gói java.lang.Numberjava.lang.Characters.

Để thêm 1 phần tử vào danh sách mảng, chúng ta sử dụng phương thức add() đã được cung cấp sẵn. Ví dụ thêm 3 phần tử vào danh sách mảng có tên là courses như sau:

import java.util.ArrayList;

public class Main {

  public static void main(String[] args) {

    ArrayList<String> courses = new ArrayList<String>();

    courses.add("PH001");

    courses.add("PH002");

    courses.add("IT001");

    System.out.println(courses);

  }

}

Kết quả sẽ in ra là:

[PH001, PH002, IT001]

Lưu ý là phương thức println() thể hiện tính đa hình là có khả năng nhận đối số là 1 đối tượng kiểu danh sách mảng. Tuy nhiên, thông thường ít khi chúng ta sử dụng phương thức println() để in toàn bộ danh sách mảng mà thường sẽ duyệt danh sách mảng thông qua phương thức get() với đối số là chỉ số của danh sách mảng và được giới hạn bởi kích thước của danh sách mảng nhận được thông qua phương thức size() như sau:

import java.util.ArrayList;

public class Main {

  public static void main(String[] args) {

    ArrayList<String> courses = new ArrayList<String>();

    courses.add("PH001");

    courses.add("PH002");

    courses.add("IT001");

    //System.out.println(courses);

    for(int i = 0; i < courses.size(); i++){

        System.out.println(courses.get(i));

    }

  }

}

Kết quả in ra là:

PH001

PH002

IT001

Chúng ta cùng phát triển ví dụ trên bằng cách sử dụng kiểu đối tượng tự định nghĩa là Animal như sau:

import java.util.ArrayList;

class Animal{

    int numLeg;

    String name;

    Animal(int numLeg, String name){

        this.numLeg = numLeg;

        this.name = name;

    }

}

public class Main {

  public static void main(String[] args) {

    ArrayList<Animal> animal = new ArrayList<Animal>();

    animal.add(new Animal(2, "Duck"));

    animal.add(new Animal(2, "Chicken"));

    animal.add(new Animal(4, "Pig"));

    //System.out.println(animal);

    for(int i = 0; i < animal.size(); i++){

        System.out.println(animal.get(i).name);

    }

  }

}

Việc sử dụng một vòng lặp để duyệt và in ra danh sách mảng sẽ giúp chúng ta linh hoạt hơn trong việc kiểm soát chương trình. Các bạn hãy thử thực thi đoạn mã trên bằng cách sử dụng phương thức println() xem điều gì sẽ xảy ra?