Apidog

Nền tảng phát triển API hợp tác tất cả trong một

Thiết kế API

Tài liệu API

Gỡ lỗi API

Giả lập API

Kiểm thử API tự động

Người mới bắt đầu không thể bỏ qua! Cơ bản và cách sử dụng List và mảng trong Java

Maurice Odida

Maurice Odida

Updated on tháng 12 18, 2024

Dan struct Java, List là một loại bộ sưu tập rất tiện lợi và thường được sử dụng. Trong khi nó thực hiện một vai trò tương tự như mảng (Array), nó cung cấp nhiều lợi thế hơn về việc thay đổi kích thước và thao tác dữ liệu. Trong bài viết này, chúng tôi sẽ giải thích các khái niệm cơ bản và cách sử dụng List, cũng như các lớp thực hiện chính, với giải thích chi tiết để người mới bắt đầu có thể hiểu.

💡
Học các khái niệm cơ bản về Java và thao tác với danh sách là bước đầu tiên để nâng cao kỹ năng lập trình của bạn. Tuy nhiên, trong phát triển thực tế, việc kiểm tra và quản lý API là rất quan trọng. Tại đây, Apidog có thể giúp ích!
Apidog là một công cụ giúp tự động hóa kiểm tra API một cách dễ dàng, quản lý thao tác danh sách và xử lý dữ liệu một cách hiệu quả. Đặc biệt, nó tương tác với API của các ứng dụng được phát triển bằng Java, cho phép trao đổi dữ liệu chính xác và thử nghiệm liền mạch. Nhờ vào việc kiểm tra tự động, các nhà phát triển có thể tiết kiệm thời gian và tập trung vào việc cải thiện chất lượng sản phẩm.
Tải ngay Apidog để nâng cao hiệu quả phát triển API và mang đến dịch vụ chất lượng cao một cách nhanh chóng!
button

Khái niệm về List

List là một bộ sưu tập có thứ tự và có thể lưu trữ cùng một phần tử nhiều lần. Mỗi phần tử của List được gán một chỉ số (index), cho phép truy cập trong khi giữ nguyên thứ tự. Nói chung, sự khác biệt với mảng (Array) là List có thể thay đổi kích thước một cách động, do đó có thể được sử dụng linh hoạt hơn.

Mảng được xác định kích thước tại thời điểm khai báo và không thể thay đổi kích thước sau đó, trong khi List có thể thêm hoặc xóa phần tử khi cần. Đặc điểm này chính là một trong những lợi thế lớn khi sử dụng List.

Các lớp thực hiện của List

List là một giao diện và có một số lớp thực hiện cụ thể. Trong thư viện chuẩn của Java, ArrayListLinkedList là các lớp thực hiện điển hình. Những lớp này thực hiện giao diện List và có cùng phương thức trong khi cấu trúc dữ liệu nội bộ là khác nhau.

java-list

ArrayList

ArrayList sử dụng mảng động bên trong, việc thêm các phần tử và truy cập theo chỉ số cực kỳ nhanh chóng. Tuy nhiên, việc xóa hoặc chèn phần tử có thể tốn kém, đặc biệt là khi chèn phần tử vào giữa danh sách, cần phải dịch chuyển các phần tử hiện có, làm giảm hiệu suất.

java-ArrayList

Ví dụ sử dụng

ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");

System.out.println(list.get(0));  // Apple

LinkedList

LinkedList sử dụng danh sách liên kết (mỗi phần tử giữ liên kết đến phần tử trước và sau). Do đó, việc xóa hoặc chèn phần tử là hiệu quả, tuy nhiên truy cập theo chỉ số sẽ chậm hơn. Đặc biệt, thao tác với đầu hoặc cuối danh sách thì rất nhanh.

java-LinkedList

Ví dụ sử dụng

LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("Dog");
linkedList.add("Cat");
linkedList.add("Rabbit");

System.out.println(linkedList.get(1));  // Cat

Cách sử dụng cơ bản của List

Khi sử dụng List, có một số thao tác cơ bản nên nhớ. Dưới đây là cách khởi tạo List, thêm, lấy và xóa phần tử.

button

Khởi tạo

Cách khởi tạo List rất đơn giản, bạn chỉ cần viết như sau.

Ví dụ sử dụng

List<String> list = new ArrayList<>();

Bạn cũng có thể thêm một số phần tử trong khi khởi tạo.

Ví dụ sử dụng

List<String> list = Arrays.asList("One", "Two", "Three");

Thêm phần tử

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

Ví dụ sử dụng

List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");

Thay thế phần tử

Bằng cách sử dụng phương thức set(), bạn có thể thay thế phần tử tại chỉ số đã chỉ định.

Ví dụ sử dụng

list.set(1, "C++");

Lấy phần tử

Bằng cách sử dụng phương thức get(), bạn có thể lấy phần tử bằng cách chỉ định chỉ số.

Ví dụ sử dụng

String language = list.get(0);  // "Java"

Xóa phần tử

Bằng cách sử dụng phương thức remove(), bạn có thể xóa phần tử đã chỉ định.

Ví dụ sử dụng

list.remove(0);  // Xóa "Java"

Phương thức có thể sử dụng với List

List không chỉ bao gồm các phương thức thêm, xóa và lấy, mà còn có nhiều phương thức tiện lợi khác. Dưới đây là một số phương thức thường được sử dụng.

Sắp xếp các phần tử

Bạn có thể sử dụng phương thức Collections.sort() để sắp xếp các phần tử trong danh sách.

Ví dụ sử dụng

Collections.sort(list);

Xử lý từng phần tử trong List

Bạn có thể sử dụng phương thức forEach() để thực hiện các thao tác trên từng phần tử trong danh sách.

Ví dụ sử dụng

list.forEach(element -> System.out.println(element));

Các thao tác ứng dụng của List

List không chỉ đơn thuần là lưu trữ phần tử mà còn có thể thực hiện nhiều thao tác khác nhau. Ví dụ, bạn có thể thực hiện các thao tác nối danh sách, tìm kiếm và tạo danh sách theo thứ tự ngược lại.

Sắp xếp phần tử

Khi sắp xếp các phần tử trong danh sách, bạn có thể dễ dàng sử dụng Collections.sort().

Ví dụ sử dụng

List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6);
Collections.sort(numbers);
System.out.println(numbers);  // [1, 1, 2, 3, 4, 5, 6, 9]

Nối các danh sách

Bằng cách sử dụng phương thức addAll(), bạn có thể nối hai danh sách lại với nhau.

Ví dụ sử dụng

List<String> list1 = new ArrayList<>(Arrays.asList("Apple", "Banana"));
List<String> list2 = new ArrayList<>(Arrays.asList("Cherry", "Date"));
list1.addAll(list2);
System.out.println(list1);  // [Apple, Banana, Cherry, Date]

Đảo ngược danh sách

Bằng cách sử dụng Collections.reverse(), bạn có thể đảo ngược danh sách.

Ví dụ sử dụng

List<String> list = new ArrayList<>(Arrays.asList("One", "Two", "Three"));
Collections.reverse(list);
System.out.println(list);  // [Three, Two, One]

Sự khác biệt giữa List và mảng

List và mảng (Array) đều được sử dụng để lưu trữ nhiều dữ liệu, nhưng có một số sự khác biệt quan trọng.

  • Thay đổi kích thước: Mảng có kích thước cố định và không thể thay đổi kích thước. Trong khi đó, List có thể thay đổi kích thước động.
  • Loại phần tử: Mảng chỉ có thể lưu trữ dữ liệu cùng loại, nhưng List có thể xử lý các phần tử khác loại bằng cách sử dụng generics.
  • Phương thức: Mảng không có phương thức, nhưng List cung cấp nhiều phương thức tiện lợi như thêm, xóa, lấy và tìm kiếm các phần tử.
button

Câu hỏi thường gặp (FAQ)

1: Điểm khác nhau giữa List và mảng trong Java là gì?

Câu trả lời:
Sự khác biệt chính giữa List và mảng là tính linh hoạt trong việc thay đổi kích thước. Mảng có kích thước cố định nhưng List có thể thay đổi kích thước động. Điều này làm cho việc thêm và xóa dữ liệu trở nên đơn giản hơn.

Ví dụ mã:

// Ví dụ về mảng
int[] arr = new int[5]; // Kích thước mảng là cố định
arr[0] = 10;
arr[1] = 20;

// Ví dụ về List
List<Integer> list = new ArrayList<>();
list.add(10);  // Có thể thay đổi kích thước
list.add(20);

Giải thích:
Trong đoạn mã trên, mảng arr được khai báo với kích thước 5 và không thể thay đổi kích thước sau đó. Ngược lại, list dùng ArrayList có thể thay đổi kích thước động khi thêm phần tử.

2: Điểm khác nhau giữa ArrayList và LinkedList là gì?

Câu trả lời:
ArrayList cho phép truy cập nhanh theo chỉ số nhưng việc thêm và xóa phần tử có thể tốn thời gian. Ngược lại, LinkedList cho phép thêm và xóa phần tử nhanh chóng nhưng truy cập theo chỉ số sẽ chậm hơn.

Ví dụ mã:

// ArrayList
List<Integer> arrayList = new ArrayList<>();
arrayList.add(10);
arrayList.add(20);
System.out.println("Phần tử đầu tiên của ArrayList: " + arrayList.get(0));

// LinkedList
List<Integer> linkedList = new LinkedList<>();
linkedList.add(10);
linkedList.add(20);
System.out.println("Phần tử đầu tiên của LinkedList: " + linkedList.get(0));

Giải thích:
ArrayListLinkedList đều thực hiện giao diện List, nhưng cấu trúc bên trong của chúng khác nhau. ArrayList dựa trên mảng và rất nhanh khi truy cập theo chỉ số. Trong khi đó, LinkedList dựa trên danh sách đôi và hiệu quả cho việc thêm và xóa nhưng chậm hơn khi truy cập theo chỉ số.

3: Cách sắp xếp các phần tử của List là gì?

Câu trả lời:
Bạn có thể sử dụng phương thức Collections.sort() để sắp xếp các phần tử của List. Mặc định, các phần tử trong danh sách sẽ được sắp xếp theo thứ tự tự nhiên.

Ví dụ mã:

import java.util.*;

public class ListSortExample {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(30);
        list.add(10);
        list.add(20);
        
        // Sắp xếp List
        Collections.sort(list);
        
        // Xuất ra danh sách sau khi sắp xếp
        System.out.println("Danh sách sau khi sắp xếp: " + list);
    }
}

Giải thích:
Collections.sort() sắp xếp các phần tử trong danh sách theo thứ tự tăng dần. Trong ví dụ trên, số nguyên 30, 10, 20 đã được thêm vào ArrayList, sau đó được sắp xếp bằng Collections.sort(). Kết quả sẽ được hiển thị theo thứ tự [10, 20, 30].

button

Tóm tắt

List trong Java là một lớp bộ sưu tập rất linh hoạt và dễ sử dụng, có nhiều lợi ích hơn so với mảng. Bằng cách sử dụng các lớp thực hiện như ArrayListLinkedList, bạn có thể thao tác dữ liệu theo nhiều tình huống khác nhau. Ngay cả khi là người mới, nếu hiểu được cách sử dụng cơ bản, bạn sẽ có thể thao tác dữ liệu một cách hiệu quả hơn.