Java collections framework: List interface và lớp ArrayList

Đây là bài 42/62 bài của series môn học Ngôn ngữ lập trình Java

1. List interface trong collections framework

List interface giúp lưu trữ và truy cập các phần tử như mảng. Nó là interface được kế thừa từ Collection interface. Những lớp kế thừa List interface là ArrayList, LinkedList, Vector, Stack.

Các lớp kế thừa List interface trong Java

Để sử dụng List cũng như các lớp kế thừa List thì chúng ta phải import các interface và các lớp.

import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        // ArrayList implementation of List
        List<String> list1 = new ArrayList<>();

        // LinkedList implementation of List
        List<String> list2 = new LinkedList<>();

    }
}

Trong ví dụ trên, chúng ta đã tạo ra đối tượng list1list2 của lớp ArrayListLinkedList.

Các phương thức của List interface

List interface bao gồm tất cả phương thức của Collection interface bởi vì List interface kế thừa Collection interface. Một số phương thức phổ biến trong List interface là:

  • add() thêm một phần tử vào list
  • addAll() thêm tất cả phần tử của một list vào một list khác
  • get() giúp truy cập ngẫu nhiên những phần tử trong list
  • iterator() trả về đối tượng iterator để truy cập các thành phần trong list
  • set() thay đổi các phần tử trong list
  • remove() xóa một phần tử trong list
  • removeAll() xóa tất cả các phần tử trong list
  • clear() xóa tất cả các phần tử trong list (hiệu quả hơn removeAll())
  • size() trả về số lượng phần tử trong list
  • toArray() chuyển đổi list thành mảng (array)
  • contains() trả về true nếu list bao gồm một phần tử cụ thể nào đó

2. Lớp ArrayList trong Java

Lớp ArrayList trong Java collections framework giúp lưu trữ các phần tử như mảng (array) nhưng mảng này có thể thay đổi kích thước. Lớp ArrayList kế thừa từ List interface.

Cây kế thừa ArrayList trong Java

ArrayListArray trong Java có điểm khác nhau lớn. Đó là kích thước của mảng cố định và không thể thay đổi. Lớp ArrayList có thể giúp chúng ta lưu trữ mảng và có thể thay đổi kích thước mảng. ArrayList còn được gọi là mảng động (dynamic array).

Để sử dụng ArrrayList, chúng ta cần import java.util.ArrayList và tạo một ArrayList theo cú pháp:

ArrayList<Type> arrayList= new ArrayList<>();

Trong đó, arrayList là tên của ArrayList được tạo ra. Type là kiểu dữ liệu của các phần tử trong ArrayList. Lưu ý: Không thể dùng các kiểu dữ liệu nguyên thủy cho ArrayList mà phải sử dụng Wrapper Class. Ví dụ:

//tạo arraylist lưu các phần tử kiểu Integer
ArrayList<Integer> arrayList = new ArrayList<>();

//tạo arraylist lưu các phần tử kiểu String
ArrayList<String> arrayList = new ArrayList<>();

2.1. Tạo và thêm các phần tử vào ArrayList

Sử dụng hàm add() để thêm các phần tử vào ArrayList.

import java.util.ArrayList;

class Main {
  public static void main(String[] args){
    ArrayList<String> languages = new ArrayList<>();

    languages.add("Java");
    languages.add("C");
    languages.add("Python");
    System.out.println("ArrayList: " + languages);
  }
}
Kết quả
ArrayList: [Java, C, Python]

Có thể thêm các phần tử vào ArrayList với vị trí xác định.

ArrayList<String> languages = new ArrayList<>();
languages.add(0, "Java");
languages.add(1, "C++");

Có thể sử dụng hàm addAll() để thêm tất cả các phần tử của một ArrayList vào một ArrayList khác.

ArrayList<String> languages = new ArrayList<>();
languages.add("Java");
languages.add("C++");
ArrayList<String> temp = new ArrayList<>();
temp.addAll(languages);

2.2. Hàm get() và set() trong ArrayList

Sử dụng hàm get() để lấy phần tử trong ArrayList. Sử dụng hàm set() để thay đổi phần tử trong ArrayList.

import java.util.ArrayList;

class Main {
  public static void main(String[] args){
    ArrayList<String> languages = new ArrayList<>();
    languages.add("Java");
    languages.add("C++");
    languages.add("Python");
    //lấy phần tử ở vị trí 1 trong ArrayList
    String str = languages.get(1);
    System.out.println("Element at index 1: " + str);
    //thay đổi phần tử ở vị trí 1 trong ArrayList
    languages.set(1, "C#");
    System.out.println("ArrayList: " + languages);
  }
}
Kết quả
Element at index 1: C++
ArrayList: [Java, C#, Python]

2.3. Xóa các phần tử trong ArrayList

Sử dụng hàm remove() để xóa phần tử trong ArrayList. Nếu muốn xóa tất cả các phần tử trong ArrayList thì có thể dùng hàm removeAll() hoặc clear().

import java.util.ArrayList;

class Main {
  public static void main(String[] args){
    ArrayList<String> languages = new ArrayList<>();
    languages.add("Java");
    languages.add("C++");
    languages.add("Python");
    //remove phần tử ở vị trí 1 trong ArrayList
    languages.remove(1);
    System.out.println("ArrayList: " + languages);
    //remove tất cả phần tử trong ArrayList
    languages.removeAll(languages);
    System.out.println("ArrayList: " + languages);
  }
}
Kết quả
ArrayList: [Java, Python]
ArrayList: []

2.4. Duyệt các phần tử trong ArrayList với vòng lặp for-each

import java.util.ArrayList;

class Main {
  public static void main(String[] args){
    ArrayList<String> languages = new ArrayList<>();
    languages.add("Java");
    languages.add("C++");
    languages.add("Python");
    System.out.println("ArrayList: " + languages);
    System.out.println("for-each ArrayList:");
    for(String language: languages){
        System.out.println(language);
    }
  }
}
Kết quả
ArrayList: [Java, C++, Python]
for-each ArrayList:
Java
C++
Python

2.5. Các hàm thông dụng trong lớp ArrayList

Ngoài các hàm như add(), get(), set(), remove(), lớp ArrayList còn có các hàm thông dụng khác như:

  • size() trả về số lượng phần tử trong ArrayList.
  • sort() sắp xếp các phần tử trong ArrayList.
  • clone() tạo ra những ArrayList mới có các phần tử giống với ArrayList đã có.
  • contains() tìm một phần tử cụ thể trong ArrayList. Nếu tìm thấy thì trả về true còn không trả về false.
  • ensureCapacity() xác định tổng số phần tử mà ArrayList có thể lưu trữ.
  • isEmpty() kiểm tra ArrayList có rỗng (empty) hay không.
  • indexOf() tìm một phần tử cụ thể trong ArrayList. Nếu tìm thấy thì sẽ trả về vị trí của phần tử đó trong ArrayList. Nếu không tìm thấy thì sẽ trả về -1.
5/5 - (1 bình chọn)
Bài trước và bài sau trong môn học<< Collections framework và collection interface trong JavaJava collections framework: lớp Vector và lớp Stack >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.