Tìm hiểu ArrayList trong Java – Sửa Máy Nhanh

1. Đặc điểm

ArrayList là một lớp triển khai của List Interface trong Collections Framework nên nó sẽ có một vài đặc điểm và phương thức tương đồng với List. Như đã nói trong bài Tổng quan về Collection trong Java, ArrayList là một Collection kiểu danh sách sử dụng cấu trúc mảng để lưu trữ phần tử. Thứ tự các phần tử dựa theo thứ tự lúc thêm vào và giá trị của các phần tử này có thể trùng nhau.

Như vậy, cả ArrayList và LinkedList đều là lớp triển khai của List Interface. Vậy khi nào chúng ta sẽ sử dụng ArrayList và khi nào chúng ta sẽ sử dụng LinkedList? Chúng ta sẽ sử dụng ArrayList khi ứng dụng của chúng ta cần truy xuất phần tử nhiều hơn cập nhật và xóa phần tử và chúng ta sẽ sử dụng LinkedList khi ứng dụng của chúng ta cần cập nhật và xóa phần tử nhiều hơn là truy cập phần tử.

2. Các phương thức phổ biến

Tạo mới một ArrayList

Để khai báo một ArrayList, chúng ta cần phải import gói thư viện java.util.ArrayList của Java. Cú pháp import như sau:

Cú pháp

123456

import java.util.ArrayList;

public class TênClass {

    

}

Sau đây là ví dụ cách tạo mới một ArrayList trong Java:

Ví dụ

12345

public static void main(String[] args) {

    

    

    ArrayList arrListString = new ArrayList<>();

}

Ngoài ra, nếu chúng ta đã biết trước số lượng phần tử thì chúng ta có thể khai báo kèm với số lượng phần tử của nó. Ví dụ dưới đây sẽ khai báo một ArrayList có tên là arrListName, kiểu là String và có 10 phần tử:

Ví dụ

12345

public static void main(String[] args) {

    

    

    ArrayList arrListName = new ArrayList<>(10);

}

Hiển thị các phần tử có trong ArrayList

Để hiển thị các phần tử có trong ArrayList, chúng ta có các cách như sau:

Hiển thị theo tên của ArrayList.

Ví dụ

12345678910111213

public static void main(String[] args) {

    

    

    ArrayList arrListDouble = new ArrayList<>(10);

        

    arrListDouble.add(8.329d);

    arrListDouble.add(1.02d);

    arrListDouble.add(2.9d);

    arrListDouble.add(20.17d);

        

    System.out.println("Các phần tử có trong arrListDouble là: ");

    System.out.println(arrListDouble);

}

Kết quả sau khi biên dịch chương trình :

Sử dụng vòng lặp for thông thường.

Ví dụ

123456789101112131415161718192021

public static void main(String[] args) {

    

    

    ArrayList arrListString = new ArrayList<>();

        

    

    arrListString.add("JAVA");

    arrListString.add("PHP");

    arrListString.add("C#");

    arrListString.add("C++");

        

    

    

    

    

    

    System.out.println("Các phần tử có trong arrListString là: ");

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

        System.out.print(arrListString.get(i) + "\t");

    }

}

Kết quả sau khi biên dịch chương trình :

Sử dụng vòng lặp for cải tiến duyệt theo đối tượng trong ArrayList.

Ví dụ

1234567891011121314151617181920

public static void main(String[] args) {

    

    

    ArrayList arrListInteger = new ArrayList<>();

        

    

    arrListInteger.add(0);

    arrListInteger.add(7);

    arrListInteger.add(1);

    arrListInteger.add(9);

        

    

    

    

    

    System.out.println("Các phần tử có trong arrListInteger là: ");

    for (int number : arrListInteger) {

        System.out.print(number + "\t");

    }

}

Kết quả sau khi biên dịch chương trình :

Sử dụng Iterator.

Để sử dụng được Iterator chúng ta cần phải import gói thư viện java.util.Iterator của Java

Ví dụ

12345678910111213141516171819202122

public static void main(String[] args) {

    

    

    ArrayList arrListFloat = new ArrayList<>();

        

    

    

    

    

    arrListFloat.add(0.7f);

    arrListFloat.add(7.26f);

    arrListFloat.add(1.02f);

    arrListFloat.add(9.3f);

        

    

    Iterator iterator = arrListFloat.iterator();

        

    System.out.println("Các phần tử có trong arrListFloat là: ");

    while (iterator.hasNext()) {

        System.out.print(iterator.next() + "\t");

    }

}

Kết quả sau khi biên dịch chương trình :

Sử dụng ListIterator.

Vì ArrayList là một lớp triển khai của List Interface nên nó cũng có thể sử dụng ListIterator để duyệt qua các phần tử của nó. Để sử dụng được ListIterator chúng ta cần phải import gói thư viện java.util.ListIterator của Java.

Ví dụ

1234567891011121314151617181920

public static void main(String[] args) {

    

    

    ArrayList arrListChar = new ArrayList<>();

        

    arrListChar.add('a');

    arrListChar.add('e');

    arrListChar.add('b');

    arrListChar.add('c');

        

    

    ListIterator listIterator = arrListChar.listIterator();

        

    

    

    System.out.println("Các phần tử có trong arrListChar là: ");

    while (listIterator.hasNext()) {

        System.out.print(listIterator.next() + "\t");

    }

}

Kết quả sau khi biên dịch chương trình :

Thêm phần tử vào trong ArrayList

Thêm phần tử sử dụng phương thức add().

Ví dụ

1234567891011121314151617181920212223242526

public static void main(String[] args) {

    ArrayList arrListMonth = new ArrayList<>(12);

        

    

    

    arrListMonth.add("January");

    arrListMonth.add("February");

    arrListMonth.add("March");

    arrListMonth.add("May");

    arrListMonth.add("June");

    arrListMonth.add("July");

    arrListMonth.add("August");

    arrListMonth.add("September");

    arrListMonth.add("October");

    arrListMonth.add("November");

    arrListMonth.add("December");

        

    

    

    arrListMonth.add(3, "April");

        

    System.out.println("Các phần tử có trong arrListMonth là: ");

    for (String month : arrListMonth) {

        System.out.println(month);

    }

}

Kết quả sau khi biên dịch chương trình :

Bên cạnh đó, chúng ta có thể sử dụng phương thức addAll() để thêm tất cả các phần tử của một ArrayList khác vào 1 vị trí bất kỳ trong ArrayList đã tồn tại. Ví dụ dưới đây sẽ thêm các phần tử của arrList1 vào vị trí số 3 trong arrList2:

Ví dụ

12345678910111213141516171819202122232425

public static void main(String[] args) {

    ArrayList arrList1 = new ArrayList<>();

        

    

    arrList1.add(6);

    arrList1.add(4);

    arrList1.add(9);

        

    ArrayList arrList2 = new ArrayList<>();

        

    

    arrList2.add(11);

    arrList2.add(15);

    arrList2.add(16);

    arrList2.add(19);

        

    

    

    arrList2.addAll(3, arrList1);

        

    System.out.println("Các phần tử có trong arrList2 là: ");

    for (int number : arrList2) {

        System.out.println(number);

    }

}

Kết quả sau khi biên dịch chương trình :

Truy cập phần tử

Java cung cấp cho chúng ta phương thức get() để truy cập đến 1 phần tử bất kỳ trong ArrayList thông qua chỉ số của phần tử đó. Ví dụ dưới đây sẽ truy cập phần tử có chỉ số là 2 trong 1 ArrayList có tên là arrListChar:

Ví dụ

123456789101112131415

public static void main(String[] args) {

    ArrayList arrListChar = new ArrayList<>();

        

    

    arrListChar.add('l');

    arrListChar.add('a');

    arrListChar.add('b');

        

    

    

    

    

    char ch = arrListChar.get(2);

    System.out.print("Phần tử có chỉ số 2 trong arrListChar là " + ch);

}

Kết quả sau khi biên dịch chương trình :

Cập nhật giá trị của phần tử

Để cập nhật giá trị của phần tử trong ArrayList, Java cung cấp cho chúng ta phương thức set(index, element), trong đó index là chỉ số của phần tử cần cập nhật và element là phần tử mới để thay thế. Để hiểu kỹ hơn về phương thức này các bạn hãy xem ví dụ sau:

Ví dụ

123456789101112131415161718192021

public static void main(String[] args) {

    ArrayList arrListInteger = new ArrayList<>();

            

    

    arrListInteger.add(4);

    arrListInteger.add(8);

    arrListInteger.add(12);

    arrListInteger.add(16);

    arrListInteger.add(20);

    arrListInteger.add(24);

            

    System.out.println("Các phần tử của arrListInteger ban đầu: ");

    System.out.println(arrListInteger);

            

    

    

    arrListInteger.set(4, 204);

            

    System.out.println("Các phần tử của arrListInteger sau khi cập nhật: ");

    System.out.println(arrListInteger);

}

Các bạn thấy trong ví dụ trên, tôi đã tiến hành thay thế giá trị của phần tử có chỉ số là 4 trong danh sách. Kết quả là chương trình sẽ thay thế giá trị 20 của phần tử này thành 204. Kết quả sau khi biên dịch chương trình như sau:

Xóa phần tử

Để xóa phần tử trong ArrayList, Java cung cấp cho chúng ta 2 phương thức có sẵn đó là phương thức clear() và phương thức remove().

Phương thức clear().

Phương thức clear() sẽ xóa tất cả các phần tử có trong ArrayList. Sau đây là ví dụ minh họa phương thức này.

Ví dụ

1234567891011121314151617181920212223

public static void main(String[] args) {

    ArrayList arrListInteger = new ArrayList<>();

        

    

    arrListInteger.add(1);

    arrListInteger.add(2);

    arrListInteger.add(3);

        

    

    

    System.out.print("Số phần tử của arrListInteger ban đầu = " + arrListInteger.size());

    System.out.println("\nCác phần tử của arrListInteger ban đầu: ");

    System.out.println(arrListInteger);

        

    

    

    arrListInteger.clear();

        

    System.out.print("Số phần tử của arrListInteger sau khi xóa = " +

        arrListInteger.size());

    System.out.println("\nCác phần tử của arrListInteger sau khi xóa: ");

    System.out.println(arrListInteger);

}

Kết quả sau khi biên dịch chương trình :

Phương thức remove().

Phương thức remove() sẽ xóa phần tử ra khỏi ArrayList theo 2 cách đó là xóa dựa vào chỉ số của phần tử và xóa trực tiếp phần tử đó (không cần biết đến chỉ số của nó). Ví dụ dưới đây sẽ minh họa 2 cách xóa này:

Ví dụ

1234567891011121314151617181920212223242526272829303132

public static void main(String[] args) {

    ArrayList arrListString = new ArrayList<>();

    arrListString.add("ANDROID");

    arrListString.add("JAVA");

    arrListString.add("PHP");

        

    

    

    ArrayList arrListStringCopy = (ArrayList) arrListString.clone();

    

    System.out.println("Các phần tử của arrListString ban đầu: ");

    System.out.println(arrListString);

        

    

    

    

    arrListString.remove(2);

    System.out.println("Các phần tử của arrListStringCopy sau khi xóa phần tử số 2: ");

    System.out.println(arrListString);

        

    System.out.println("Các phần tử của arrListStringCopy ban đầu: ");

    System.out.println(arrListStringCopy);

        

    

    

    

    arrListStringCopy.remove("JAVA");

        

    System.out.println("Các phần tử của arrListStringCopy sau khi xóa phần tử PHP: ");

    System.out.println(arrListStringCopy);

}

Kết quả sau khi biên dịch chương trình :

Tìm kiếm một phần tử

Để tìm kiếm một phần tử trong ArrayList thì chúng ta có 3 phương pháp tìm kiếm như sau:

Tìm kiếm trực tiếp phần tử.

Để tìm kiếm trực tiếp phần tử, chúng ta sẽ sử dụng phương thức contains(). Kết quả trả về là true nếu tìm thấy, ngược lại trả về false.

Cú pháp

1

boolean contains(giá_trị_phần_tử_cần_tìm);

Ví dụ dưới đây sẽ tìm kiếm phần tử có giá trị = 2 trong ArrayList arrListInteger. Nếu tìm thấy thì thông báo “Có phần tử 2 trong arrListInteger.“, ngược lại hiển thị thông báo “Không tìm thấy phần tử 2.”.

Ví dụ

123456789101112131415161718

public static void main(String[] args) {

    ArrayList arrListInteger = new ArrayList<>();

    arrListInteger.add(7);

    arrListInteger.add(2);

    arrListInteger.add(9);

        

    

    boolean resultCheck = arrListInteger.contains(2);

        

    

    

    

    if (resultCheck == true) {

        System.out.println("Có phần tử 2 trong arrListInteger.");

    } else {

        System.out.println("Không tìm thấy phần tử 2.");

    }

}

Kết quả sau khi biên dịch chương trình :

Tìm kiếm vị trí xuất hiện đầu tiên của 1 phần tử trong ArrayList.

Để tìm kiếm vị trí xuất hiện đầu tiên của 1 phần tử trong ArrayList, chúng ta sẽ sừ dụng phương thức indexOf(). Kết quả của phương thức này sẽ trả về chỉ số xuất hiện đầu tiên của phần tử đó trong ArrayList, ngược lại nếu không tìm thấy trả về -1.

Cú pháp

1

int indexOf(giá_trị_phần_tử_cần_tìm);

Ví dụ

123456789101112131415161718192021

public static void main(String[] args) {

    ArrayList arrListString = new ArrayList<>();

    arrListString.add("Bird");

    arrListString.add("Rabbit");

    arrListString.add("Tiger");

    arrListString.add("Bird");

        

    

    

    

    int position1 = arrListString.indexOf("Bird");

    System.out.println("Vị trí xuất hiện đầu tiên của phần tử \"Bird\" trong ArrayList là "

        + position1);

        

    

    

    

    int position2 = arrListString.indexOf("Cat");

    System.out.println("Vị trí xuất hiện đầu tiên của phần tử \"Cat\" trong ArrayList là "

        + position2);

}

Kết quả sau khi biên dịch chương trình :

Tìm kiếm vị trí xuất hiện cuối cùng của 1 phần tử trong List.

Để tìm kiếm vị trí xuất hiện cuối cùng của 1 phần tử trong ArrayList, chúng ta sẽ sừ dụng phương thức lastIndexOf(). Kết quả của phương thức này sẽ trả về chỉ số xuất hiện cuối cùng của phần tử đó trong ArrayList, ngược lại nếu không tìm thấy trả về -1.

Cú pháp

1

int lastIndexOf(giá_trị_phần_tử_cần_tìm);

Ví dụ

123456789101112131415161718192021222324252627

public static void main(String[] args) {

    ArrayList arrListChar = new ArrayList<>();

    arrListChar.add('A');

    arrListChar.add('B');

    arrListChar.add('C');

    arrListChar.add('D');

    arrListChar.add('E');

    arrListChar.add('F');

    arrListChar.add('C');

    arrListChar.add('D');

        

    

    

    

    

    int position1 = arrListChar.lastIndexOf('C');

    System.out.println("Vị trí xuất hiện cuối cùng của phần tử \'C\' trong arrListChar là "

        + position1);

        

    

    

    

    

    int position2 = arrListChar.lastIndexOf('D');

    System.out.println("Vị trí xuất hiện cuối cùng của phần tử \'D\' trong arrListChar là "

        + position2);

}

Kết quả sau khi biên dịch chương trình :

Chuyển ArrayList sang Array (mảng)

Java cung cấp cho chúng ta phương thức toArray() để chuyển đổi một ArrayList sang mảng tương ứng. Sau đây là ví dụ minh họa phương thức này:

Ví dụ

123456789101112131415161718

public static void main(String[] args) {

    ArrayList arrListInteger = new ArrayList<>();

    arrListInteger.add(2);

    arrListInteger.add(4);

    arrListInteger.add(6);

    arrListInteger.add(8);

        

    

    

    

    

    Object[] arr = arrListInteger.toArray();

        

    

    for (int i = 0; i < arr.length; i++) {

        System.out.println("Phần tử tại vị trí " + i + " trong arr là " + arr[i]);

    }

}

Kết quả sau khi biên dịch chương trình :

3. Lời kết

Trong bài này, tôi đã giới thiệu cho các bạn đặc điểm, các phương thức thường dùng của ArrayList. Cảm ơn các bạn đã theo dõi bài viết này.

Theo : freetuts.net