Bỏ qua để đến nội dung

Mảng (Array)

int[] scores = {90, 85, 78, 92}; // khai báo và khởi tạo cùng lúc
int[] numbers = new int[5]; // mảng 5 phần tử int, mặc định đều là 0
String[] names = new String[3]; // mảng 3 phần tử String, mặc định đều là null

Kích thước mảng được cố định ngay khi tạo - không thể thay đổi sau đó (muốn danh sách có thể thay đổi kích thước, dùng ArrayList - xem trang tiếp theo).

int[] scores = {90, 85, 78, 92};
System.out.println(scores[0]); // 90 - chỉ số bắt đầu từ 0
scores[1] = 100; // sửa phần tử tại vị trí 1
System.out.println(scores.length); // 4 - độ dài mảng (không có dấu ngoặc, không phải length())

⚠️ Truy cập chỉ số ngoài phạm vi (scores[10] với mảng chỉ có 4 phần tử) sẽ ném ArrayIndexOutOfBoundsException lúc chạy chương trình.

int[] scores = {90, 85, 78, 92};
for (int i = 0; i < scores.length; i++) {
System.out.println(scores[i]);
}
for (int score : scores) { // for-each gọn hơn
System.out.println(score);
}

Mảng trong Java là một đối tượng - biến mảng là tham chiếu đến vùng nhớ chứa các phần tử:

int[] a = {1, 2, 3};
int[] b = a; // b trỏ đến CÙNG mảng với a, không sao chép dữ liệu
b[0] = 100;
System.out.println(a[0]); // 100 - a cũng bị ảnh hưởng vì cùng trỏ đến một mảng!

Muốn sao chép thật sự (không chia sẻ vùng nhớ), dùng Arrays.copyOf() hoặc clone().

import java.util.Arrays;
int[] numbers = {5, 2, 8, 1, 9};
Arrays.sort(numbers); // sắp xếp tăng dần, sửa trực tiếp mảng gốc
System.out.println(Arrays.toString(numbers)); // [1, 2, 5, 8, 9] - in mảng dễ đọc
int[] copy = Arrays.copyOf(numbers, numbers.length); // sao chép mảng
boolean equal = Arrays.equals(numbers, copy); // so sánh nội dung hai mảng

⚠️ In trực tiếp một mảng bằng System.out.println(numbers) sẽ ra một chuỗi khó hiểu kiểu [I@1b6d3586 (địa chỉ tham chiếu) - luôn dùng Arrays.toString() để in nội dung mảng.

  • Mảng có kích thước cố định, khai báo <kiểu>[] tên = {...} hoặc new <kiểu>[kích_thước]
  • Chỉ số bắt đầu từ 0, mang.length (không có dấu ngoặc) để lấy độ dài
  • Mảng là kiểu tham chiếu - gán b = a khiến cả hai cùng trỏ đến một mảng
  • Arrays.sort(), Arrays.toString(), Arrays.copyOf() là các tiện ích thường dùng nhất