# Java - Giao diện List

Xin chào các bạn học lập trình Java! Hôm nay, chúng ta sẽ cùng nhau khám phá một trong những khái niệm cơ bản và linh hoạt nhất trong lập trình Java: giao diện List. Đừng lo lắng nếu bạn là người mới bắt đầu; tôi sẽ dẫn dắt bạn từng bước trong hành trình này, giống như tôi đã làm với hàng trăm học viên trong những năm dạy học của mình. Hãy lấy một tách cà phê (hoặc trà, nếu đó là sở thích của bạn), và cùng nhau bắt đầu cuộc phiêu lưu thú vị này nhé!

## Giao diện List là gì?

Trước khi chúng ta đi vào chi tiết, hãy bắt đầu với một ví dụ đơn giản. Hãy tưởng tượng bạn đang lên kế hoạch cho một buổi tiệc và cần theo dõi danh sách khách mời. Bạn có thể viết tên họ trên một mảnh giấy, phải không? Well, một List trong Java giống như那张纸,但强大得多且更灵活。

Trong Java, một List là một giao diện đại diện cho một bộ sưu tập các phần tử được sắp xếp. Nó là một phần của Java Collections Framework, là một bộ các lớp và giao diện thực hiện các cấu trúc dữ liệu bộ sưu tập có thể tái sử dụng phổ biến.

### Các đặc điểm chính của List

1. Được sắp xếp: Các phần tử trong một List duy trì thứ tự chèn của chúng.
2. Cho phép trùng lặp: Bạn có thể có nhiều phần tử identically trong một List.
3. Dựa trên chỉ số: Bạn có thể truy cập các phần tử theo vị trí (chỉ số) của chúng trong List.

## Tạo một List

Bây giờ, hãy cùng viết một đoạn mã! Trong Java, chúng ta thường sử dụng một trong hai lớp thực hiện giao diện List: ArrayList hoặc LinkedList. Hiện tại, chúng ta sẽ tập trung vào ArrayList vì nó được sử dụng phổ biến nhất.

```java
import java.util.ArrayList;
import java.util.List;

public class ListExample {
    public static void main(String[] args) {
        // Tạo một List của Strings
        List<String> guestList = new ArrayList<>();

        // Thêm khách vào danh sách của chúng ta
        guestList.add("Alice");
        guestList.add("Bob");
        guestList.add("Charlie");

        System.out.println("Danh sách khách: " + guestList);
    }
}

Khi bạn chạy đoạn mã này, bạn sẽ thấy:

Java - List Interface

Danh sách khách: [Alice, Bob, Charlie]

Hãy phân tích những gì đang xảy ra ở đây:

  1. Chúng ta nhập các lớp cần thiết từ gói java.util.
  2. Chúng ta tạo một List của các đối tượng String gọi là guestList.
  3. Chúng ta sử dụng phương thức add() để thêm khách vào danh sách của chúng ta.
  4. Cuối cùng, chúng ta in toàn bộ danh sách.

Các thao tác phổ biến trên List

Bây giờ chúng ta đã có danh sách khách, hãy cùng khám phá một số thao tác phổ biến mà chúng ta có thể thực hiện trên Lists.

Thêm phần tử

Chúng ta đã thấy cách thêm phần tử sử dụng phương thức add() rồi. Nhưng còn nhiều hơn thế!

// Thêm một phần tử tại vị trí cụ thể
guestList.add(1, "David");

// Thêm nhiều phần tử cùng lúc
List<String> moreGuests = Arrays.asList("Eve", "Frank");
guestList.addAll(moreGuests);

System.out.println("Danh sách khách đã cập nhật: " + guestList);

Kết quả đầu ra:

Danh sách khách đã cập nhật: [Alice, David, Bob, Charlie, Eve, Frank]

Truy cập phần tử

Để truy cập các phần tử trong một List, chúng ta sử dụng phương thức get():

String firstGuest = guestList.get(0);
System.out.println("Khách đầu tiên là: " + firstGuest);

Kết quả đầu ra:

Khách đầu tiên là: Alice

Xóa phần tử

Chúng ta có thể xóa phần tử bằng cách sử dụng chỉ số hoặc chính phần tử đó:

// Xóa theo chỉ số
guestList.remove(2);

// Xóa theo phần tử
guestList.remove("Frank");

System.out.println("Sau khi xóa: " + guestList);

Kết quả đầu ra:

Sau khi xóa: [Alice, David, Charlie, Eve]

Kiểm tra xem phần tử có tồn tại không

Để kiểm tra xem một List có chứa phần tử cụ thể nào đó không, sử dụng phương thức contains():

boolean isAliceInvited = guestList.contains("Alice");
System.out.println("Alice có được mời không? " + isAliceInvited);

Kết quả đầu ra:

Alice có được mời không? true

Lấy kích thước của List

Để biết có bao nhiêu phần tử trong List của bạn, sử dụng phương thức size():

int numberOfGuests = guestList.size();
System.out.println("Số lượng khách: " + numberOfGuests);

Kết quả đầu ra:

Số lượng khách: 4

Lặp qua một List

Một trong những thao tác phổ biến nhất bạn sẽ thực hiện với Lists là lặp qua các phần tử của chúng. Java cung cấp nhiều cách để làm điều này:

Sử dụng vòng lặp for-each

Đây là cách đơn giản và dễ đọc nhất:

System.out.println("Danh sách khách:");
for (String guest : guestList) {
    System.out.println("- " + guest);
}

Kết quả đầu ra:

Danh sách khách:
- Alice
- David
- Charlie
- Eve

Sử dụng vòng lặp for truyền thống

Nếu bạn cần truy cập vào chỉ số, bạn có thể sử dụng vòng lặp for truyền thống:

System.out.println("Danh sách khách với số thứ tự:");
for (int i = 0; i < guestList.size(); i++) {
    System.out.println((i + 1) + ". " + guestList.get(i));
}

Kết quả đầu ra:

Danh sách khách với số thứ tự:
1. Alice
2. David
3. Charlie
4. Eve

Sử dụng Iterator

Đối với các thao tác phức tạp hơn, bạn có thể sử dụng một Iterator:

System.out.println("Xóa khách có tên bắt đầu bằng 'A':");
Iterator<String> iterator = guestList.iterator();
while (iterator.hasNext()) {
    String guest = iterator.next();
    if (guest.startsWith("A")) {
        iterator.remove();
        System.out.println("Đã xóa: " + guest);
    }
}
System.out.println("Danh sách khách đã cập nhật: " + guestList);

Kết quả đầu ra:

Xóa khách có tên bắt đầu bằng 'A':
Đã xóa: Alice
Danh sách khách đã cập nhật: [David, Charlie, Eve]

Bảng các phương thức phổ biến của List

Dưới đây là bảng các phương thức phổ biến của List:

Phương thức Mô tả
add(E e) Thêm một phần tử vào cuối danh sách
add(int index, E element) Chèn một phần tử vào vị trí cụ thể
get(int index) Trả về phần tử tại vị trí cụ thể
remove(int index) Xóa phần tử tại vị trí cụ thể
remove(Object o) Xóa lần xuất hiện đầu tiên của phần tử cụ thể
size() Trả về số lượng phần tử trong danh sách
clear() Xóa tất cả phần tử khỏi danh sách
contains(Object o) Trả về true nếu danh sách chứa phần tử cụ thể
indexOf(Object o) Trả về chỉ số của lần xuất hiện đầu tiên của phần tử cụ thể
isEmpty() Trả về true nếu danh sách không chứa phần tử nào

Kết luận

Chúc mừng! Bạn đã迈出了进入Java列表世界的第一步。我们已经介绍了创建、操作和遍历列表的基础知识,这些是任何Java程序员必备的技能。

记住,Lists chỉ là phần nổi của tảng băng khi nói đến các bộ sưu tập Java. Trong hành trình của bạn, bạn sẽ gặp phải các cấu trúc dữ liệu thú vị khác như Sets, Maps và Queues, mỗi cái đều có những thuộc tính và trường hợp sử dụng độc đáo.

Lập trình là về thực hành, vì vậy tôi khuyến khích bạn thử nghiệm với các khái niệm này. Thử tạo các loại Lists khác nhau, thêm những twist riêng của bạn vào các ví dụ chúng ta đã thảo luận, và quan trọng nhất, hãy vui vẻ! Ai biết được, có thể bạn sẽ sử dụng những kỹ năng này để tạo ra ứng dụng tiếp theo lớn sẽ cách mạng hóa việc lập kế hoạch tiệc!

Đến gặp lại lần sau, chúc các bạn lập trình vui vẻ!

Credits: Image by storyset