Mảng Một Chiều (Array) Trong Java: Quản Lý Danh Sách Dữ Liệu Đơn Giản

Ở các bài học trước, bạn đã biết cách sử dụng biến để lưu trữ một giá trị đơn lẻ như tuổi, điểm số hay tên của một cá nhân. Tuy nhiên, nếu chương trình cần quản lý điểm thi của 50 học sinh hay giá của 100 sản phẩm, việc tạo 50 hay 100 biến riêng biệt sẽ khiến mã nguồn trở nên cồng kềnh và khó quản lý. Đây chính là lúc chúng ta cần đến Mảng (Array).

Hình minh họa khái niệm và cú pháp khai báo mảng một chiều trong ngôn ngữ lập trình Java

1. Mảng Một Chiều Trong Java Là Gi?

Mảng là một cấu trúc dữ liệu cho phép lưu trữ một danh sách cố định các phần tử có cùng kiểu dữ liệu dưới một tên biến duy nhất. Các phần tử trong mảng được sắp xếp liên tiếp nhau và được quản lý thông qua vị trí (gọi là chỉ số hay index).

Các đặc điểm quan trọng của mảng trong Java bao gồm:

  • Kích thước cố định: Khi một mảng được tạo ra, số lượng phần tử của nó không thể thay đổi (không thể tăng thêm hay giảm đi).
  • Cùng kiểu dữ liệu: Tất cả phần tử trong mảng phải thuộc cùng một kiểu (ví dụ: toàn bộ là int, String, hoặc double).
  • Chỉ số bắt đầu từ 0: Phần tử đầu tiên của mảng nằm ở vị trí 0, phần tử tiếp theo ở vị trí 1, và phần tử cuối cùng nằm ở vị trí kích_thước - 1.

2. Cách Khai Báo Và Khởi Tạo Mảng Một Chiều

Trong Java, bạn có thể khai báo và khởi tạo mảng theo hai cách chính tùy thuộc vào việc bạn đã có sẵn dữ liệu hay chưa.

Cách 1: Khai báo với độ dài cố định (chưa có giá trị ban đầu)

Cú pháp:

kiểu_dữ_liệu[] tên_mảng = new kiểu_dữ_liệu[kích_thước];

Ví dụ:

// Khởi tạo mảng lưu 5 số nguyên. Các phần tử mặc định sẽ nhận giá trị 0.
int[] ages = new int[5];

// Khởi tạo mảng lưu 3 chuỗi. Các phần tử mặc định nhận giá trị null.
String[] names = new String[3];

Cách 2: Khởi tạo mảng trực tiếp kèm giá trị

Nếu đã biết trước các phần tử, bạn có thể truyền thẳng danh sách giá trị vào trong cặp dấu ngoặc nhọn {}:

int[] scores = {9, 8, 10, 7, 6};
String[] colors = {"Red", "Green", "Blue"};

3. Truy Xuất Và Thay Đổi Giá Trị Phần Tử

Để lấy hoặc gán giá trị cho một phần tử trong mảng, bạn sử dụng cú pháp tên_mảng[chỉ_số].

public class ArrayBasic {
    public static void main(String[] args) {
        // Khởi tạo mảng gồm 3 phần tử
        int[] numbers = {10, 20, 30};

        // Truy xuất giá trị phần tử đầu tiên (chỉ số 0)
        System.out.println("Phần tử đầu tiên: " + numbers[0]); // In ra 10

        // Thay đổi giá trị của phần tử thứ hai (chỉ số 1)
        numbers[1] = 25;
        System.out.println("Phần tử thứ hai sau khi sửa: " + numbers[1]); // In ra 25

        // Lấy độ dài của mảng qua thuộc tính .length
        System.out.println("Độ dài của mảng là: " + numbers.length); // In ra 3
    }
}

Lưu ý quan trọng: Nếu bạn cố gắng truy xuất đến một chỉ số không tồn tại (ví dụ: chỉ số âm hoặc chỉ số lớn hơn hoặc bằng độ dài mảng như numbers[3] đối với mảng có 3 phần tử), Java sẽ báo lỗi ArrayIndexOutOfBoundsException và dừng chương trình.

4. Duyệt Mảng Bằng Vòng Lặp

Để thao tác với tất cả các phần tử trong mảng (như in danh sách, tính tổng, tìm giá trị lớn nhất), chúng ta sẽ kết hợp mảng với vòng lặp.

Sử dụng vòng lặp for cơ bản

Vòng lặp for giúp bạn dễ dàng truy cập phần tử thông qua biến đếm làm chỉ số:

int[] ages = {18, 20, 22, 25};

for (int i = 0; i < ages.length; i++) {
    System.out.println("Phần tử tại vị trí " + i + " là: " + ages[i]);
}

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

Nếu bạn chỉ muốn lấy giá trị của từng phần tử từ đầu đến cuối mà không cần quan tâm đến chỉ số i, vòng lặp for-each cung cấp cú pháp ngắn gọn hơn:

int[] ages = {18, 20, 22, 25};

for (int age : ages) {
    System.out.println("Tuổi: " + age);
}

5. Ví Dụ Thực Tế: Nhập Mảng Từ Bàn Phím Và Tính Tổng

Dưới đây là một chương trình hoàn chỉnh kết hợp lớp Scanner để nhập thông tin từ người dùng, lưu vào mảng và tính tổng các số đã nhập:

import java.util.Scanner;

public class ArrayExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("Nhập số lượng phần tử của mảng: ");
        int n = scanner.nextInt();

        // Khởi tạo mảng số nguyên có n phần tử
        int[] arr = new int[n];

        // Nhập dữ liệu cho từng phần tử
        System.out.println("Nhập các phần tử:");
        for (int i = 0; i < n; i++) {
            System.out.print("arr[" + i + "] = ");
            arr[i] = scanner.nextInt();
        }

        // Tính tổng các phần tử trong mảng
        int sum = 0;
        for (int item : arr) {
            sum += item;
        }

        System.out.println("Tổng các phần tử trong mảng là: " + sum);
    }
}

Kết Luận

Mảng một chiều là một trong những cấu trúc dữ liệu nền tảng nhất trong Java. Mặc dù có hạn chế là kích thước không thể thay đổi linh hoạt sau khi khởi tạo, việc nắm vững mảng giúp bạn hiểu rõ cách máy tính quản lý và truy xuất bộ nhớ, tạo tiền đề để làm việc với các cấu trúc dữ liệu nâng cao hơn sau này.


Nguồn tham khảo


📚 Chuỗi bài: Lộ Trình Tự Học Java Từ Con Số 0 Đến Ứng Dụng Thực Tế

Chuỗi 20 bài viết thiết kế dạng 'cầm tay chỉ việc' dành riêng cho người mới bắt đầu học lập trình Java. Lộ trình đi từ tư duy nền tảng, cú pháp cơ bản, lập trình hướng đối tượng (OOP) cho đến hoàn thiện một dự án thực tế nhỏ.

  1. 1. Java Là Giống Gì? Cài Đặt Environment (JDK & IntelliJ IDEA) Cực Nhanh
  2. 2. Giải Mã Chương Trình 'Hello World' Và Cấu Trúc Cơ Bản Của Bài Code Java
  3. 3. Biến Và Kiểu Dữ Liệu Trong Java: Cách Lưu Trữ Thông Tin Đúng Chuẩn
  4. 4. Toán Tử Trong Java: Hướng Dẫn Tính Toán Và So Sánh Chi Tiết
  5. 5. Nhập Xuất Dữ Liệu Với Scanner: Làm Cho Chương Trình Biết Tương Tác
  6. 6. Cấu Trúc Điều Kiện If-Else Và Switch-Case: Dạy Máy Tính Rẽ Nhánh Tư Duy
  7. 7. Vòng Lặp For, While Và Do-While Trong Java: Tự Động Hóa Công Việc Lặp Lại
  8. 8. Phương Thức (Method) Trong Java: Tái Sử Dụng Code Một Cách Thông Minh
  9. 9. Mảng Một Chiều (Array) Trong Java: Quản Lý Danh Sách Dữ Liệu Đơn Giản ← Bạn đang đọc
  10. 10. Bài 10: Xử Lý Chuỗi Dữ Liệu Với String Và StringBuilder Trong Java
  11. 11. Lập Trình Hướng Đối Tượng (OOP): Lớp (Class) Và Đối Tượng (Object) Là Đâu?
  12. 12. Tính Đóng Gói (Encapsulation) Và Access Modifiers: Bảo Vệ Dữ Liệu Safe 100%
  13. 13. Tính Kế Thừa (Inheritance): Tái Sử Dụng Mã Nguồn Với Từ Khóa Extends
  14. 14. Tính Đa Hình (Polymorphism): Nạp Chồng (Overloading) Và Ghi Đè (Overriding)
  15. 15. Lộ Trình Tự Học Java: Tính Trừu Tượng (Abstraction) - Abstract Class Hay Interface?
  16. 16. Xử Lý Ngoại Lệ (Exception Handling): Giúp Chương Trình Không Bị 'Sập' Đột Ngột
  17. 17. Java Collections Framework: Làm Quen Mảng Cố Định Với ArrayList
  18. 18. Lưu Trữ Cặp Dữ Liệu Key-Value Cực Kỳ Nhanh Với HashMap
  19. 19. Đọc Và Ghi File Trong Java: Lưu Trữ Dữ Liệu Lâu Dài Vào Ổ Cứng
  20. 20. Dự Án Thực Tế: Xây Dựng Ứng Dụng Quản Lý Sinh Viên Console Hoàn Chỉnh

← Bài trước: Phương Thức (Method) Trong Java: Tái Sử Dụng Code Một Cách Thông Minh Bài tiếp theo: Bài 10: Xử Lý Chuỗi Dữ Liệu Với String Và StringBuilder Trong Java →

Nhận xét