Mảng (Arrays) - Cách Lưu trữ Danh sách Dữ liệu

Đăng ngày: 24-08-2025 07:45
học javajava cơ bảnlập trình javamảng trong javaarray javakhai báo mảngduyệt mảngmảng một chiềumảng hai chiềufor-each

Chào mừng bạn đã đến với bài 5 trong series "Chinh Phục Java"! Ở các bài trước, bạn đã học cách dùng biến để lưu trữ một giá trị duy nhất. Ví dụ như một con số hay một ký tự. Nhưng trong thực tế, chúng ta thường cần làm việc với cả một danh sách dữ liệu. Ví dụ: danh sách điểm số của sinh viên, hay danh sách các ngày trong tuần. **Mảng (Array)** chính là công cụ để làm việc đó.

1. Mảng là gì? Tại sao nó hữu ích?

Mảng là một cấu trúc dữ liệu cơ bản nhất. Nó cho phép bạn lưu trữ một tập hợp các giá trị **cùng một kiểu dữ liệu** trong một biến duy nhất. Hãy tưởng tượng mảng giống như một dãy ghế trong rạp chiếu phim. Tất cả các ghế đều được đánh số thứ tự liên tiếp. Bạn có thể dễ dàng tìm đến một chiếc ghế bất kỳ nếu biết số của nó. Mảng cũng hoạt động tương tự như vậy.

Sử dụng mảng giúp code của bạn trở nên gọn gàng hơn. Thay vì phải khai báo 10 biến riêng lẻ để lưu điểm của 10 sinh viên, bạn chỉ cần một mảng duy nhất. Mảng có kích thước cố định. Điều này có nghĩa là một khi bạn đã tạo ra một mảng với 10 phần tử, bạn không thể thay đổi kích thước của nó. Kích thước này phải được xác định ngay khi khởi tạo.

2. Khai báo và Khởi tạo Mảng một chiều

Làm việc với mảng trong Java bao gồm hai bước chính. Đầu tiên là **khai báo** (declaration) một biến mảng. Thứ hai là **khởi tạo** (initialization) mảng, tức là cấp phát bộ nhớ cho nó. Hãy xem qua các cách thực hiện.

2.1. Cách 1: Khai báo và khởi tạo riêng biệt

Đây là cách làm rõ ràng từng bước. Đầu tiên, bạn khai báo một biến có kiểu là mảng. Sau đó, bạn dùng từ khóa `new` để tạo ra mảng với một kích thước cụ thể.


// Bước 1: Khai báo một biến mảng tên 'scores' để chứa các số thực
double[] scores; 

// Bước 2: Khởi tạo mảng này với kích thước là 5 phần tử
scores = new double[5]; // Mảng này có thể chứa 5 giá trị double

2.2. Cách 2: Khai báo và khởi tạo trên cùng một dòng

Bạn có thể kết hợp hai bước trên để code ngắn gọn hơn. Đây là cách làm phổ biến nhất.


// Tạo một mảng số nguyên có thể chứa 10 phần tử
int[] numbers = new int[10];

2.3. Cách 3: Khởi tạo mảng với các giá trị ban đầu

Nếu bạn đã biết trước các giá trị của mảng, bạn có thể khởi tạo chúng ngay lập tức. Java sẽ tự động xác định kích thước của mảng dựa trên số lượng giá trị bạn cung cấp.


// Tạo một mảng String chứa tên các ngày trong tuần
String[] daysOfWeek = {"Chủ nhật", "Thứ hai", "Thứ ba", "Thứ tư", "Thứ năm", "Thứ sáu", "Thứ bảy"};

3. Truy cập và Thay đổi các phần tử Mảng

Các phần tử trong mảng được truy cập thông qua **chỉ số (index)**. Chỉ số này là một số nguyên không âm. Điều quan trọng nhất cần nhớ là: **Chỉ số trong mảng Java bắt đầu từ 0**. Điều này có nghĩa là phần tử đầu tiên có chỉ số là 0, phần tử thứ hai có chỉ số là 1, và cứ thế tiếp tục. Phần tử cuối cùng sẽ có chỉ số là `độ_dài_mảng - 1`.

Bạn sử dụng cặp dấu ngoặc vuông `[]` để truy cập hoặc thay đổi giá trị của một phần tử.


public class ArrayAccessExample {
    public static void main(String[] args) {
        // Khởi tạo một mảng điểm số
        double[] scores = new double[3];

        // Gán giá trị cho các phần tử
        scores[0] = 8.5; // Phần tử đầu tiên (chỉ số 0)
        scores[1] = 9.0; // Phần tử thứ hai (chỉ số 1)
        scores[2] = 7.2; // Phần tử thứ ba (chỉ số 2)

        // Truy cập và in giá trị của phần tử thứ hai
        System.out.println("Điểm của sinh viên thứ hai là: " + scores[1]); // In ra 9.0

        // Thay đổi giá trị của phần tử cuối cùng
        scores[2] = 8.0;
        System.out.println("Điểm mới của sinh viên cuối cùng là: " + scores[2]); // In ra 8.0
    }
}

Để biết kích thước của một mảng, bạn có thể dùng thuộc tính `.length`. Ví dụ: `scores.length` sẽ trả về `3`.

4. Duyệt Mảng: Làm việc với tất cả các phần tử

Sức mạnh thực sự của mảng được thể hiện khi kết hợp với vòng lặp. Vòng lặp cho phép chúng ta thực hiện một hành động trên tất cả các phần tử của mảng một cách tự động. Có hai cách phổ biến để duyệt mảng.

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

Cách này cho phép bạn truy cập cả chỉ số và giá trị của từng phần tử. Nó rất hữu ích khi bạn cần biết vị trí của phần tử đang xử lý.


String[] fruits = {"Táo", "Cam", "Chuối", "Xoài"};

System.out.println("Danh sách các loại hoa quả:");
for (int i = 0; i < fruits.length; i++) {
    System.out.println("Phần tử ở chỉ số " + i + " là: " + fruits[i]);
}

4.2. Sử dụng vòng lặp `for-each` (Enhanced for loop)

Khi bạn chỉ quan tâm đến giá trị của các phần tử mà không cần đến chỉ số, vòng lặp `for-each` là một lựa chọn gọn gàng và dễ đọc hơn. Cú pháp của nó rất đơn giản: `for (Kiểu_Dữ_Liệu tên_biến : tên_mảng)`.


int[] numbers = {10, 20, 30, 40, 50};

int sum = 0;
for (int number : numbers) {
    sum += number; // Cộng dồn giá trị của từng phần tử vào biến sum
}
System.out.println("Tổng các số trong mảng là: " + sum); // In ra 150
Mảng (Arrays) - Cách Lưu trữ Danh sách Dữ liệu - 0

5. Bài tập thực hành: Tìm giá trị lớn nhất

Đến lúc bạn thực hành rồi! Hãy thử viết một chương trình để tìm ra số lớn nhất trong một mảng các số nguyên. Gợi ý: tạo một biến `max` và gán cho nó giá trị của phần tử đầu tiên. Sau đó, dùng vòng lặp để duyệt qua các phần tử còn lại. Nếu phần tử nào lớn hơn `max`, hãy cập nhật lại giá trị của `max`.


Kết luận

Bạn vừa học được cách làm việc với Mảng. Đây là một cấu trúc dữ liệu cơ bản nhưng cực kỳ quan trọng. Nó giúp bạn lưu trữ và quản lý các tập hợp dữ liệu một cách có tổ chức. Hãy thực hành thật nhiều để quen với việc chỉ số bắt đầu từ 0. Ở bài tiếp theo, chúng ta sẽ khám phá về Phương thức. Đây là cách để đóng gói và tái sử dụng code của bạn. Hẹn gặp lại bạn!

0 Bình luận