Mảng trong Java - Kiến thức cơ bản cho người mới
Ngôn Ngữ Lập Trình
Mục lục
Mảng trong Java là gì?
Mảng (Array) trong Java là một cấu trúc dữ liệu được sử dụng để lưu trữ một tập hợp các phần tử có cùng kiểu dữ liệu, và tất cả các phần tử này được lưu trữ trong các vị trí liên tiếp nhau trong bộ nhớ. Mảng có một kích thước cố định, tức là khi đã được tạo ra, số lượng phần tử không thể thay đổi. Hãy cùng xem xét một ví dụ:
Ví dụ về phần tử trong Mảng (Array):
50 | 14 | 77 | 38 | 22 | 31 | 60 |
Ví dụ về chỉ số trong Mảng (Array):
0 | 1 | 2 | 3 | 4 | 5 | 6 |
Đây là một mảng gồm bảy phần tử. Tất cả các phần tử đều là số nguyên và đồng nhất. Bảng bên dưới mảng được gọi là chỉ số, luôn bắt đầu từ số không và tăng lên đến n-1 phần tử. Trong trường hợp này, vì có bảy phần tử, chỉ số từ số không đến sáu.
Đặc điểm của Mảng trong Java
Mảng (Array) trong Java có một số đặc điểm chính sau:
Cố định kích thước
Kích thước của mảng phải được xác định khi mảng được tạo ra. Sau khi mảng đã được khởi tạo, kích thước của nó không thể thay đổi. Điều này có nghĩa là nếu bạn cần thêm phần tử sau khi đã khởi tạo, bạn phải tạo một mảng mới có kích thước lớn hơn.
int[] arr = new int[5]; |
→ Mảng có kích thước cố định là 5
Lưu trữ các phần tử cùng kiểu dữ liệu
Mảng chỉ có thể lưu trữ các phần tử có cùng kiểu dữ liệu, như int, float, String, hoặc kiểu đối tượng. Điều này đảm bảo tính nhất quán trong quá trình xử lý dữ liệu.
int[] numbers = {1, 2, 3}; |
→ Mảng chứa các giá trị kiểu int
String[] names = {"Alice", "Bob"}; |
→ Mảng chứa các chuỗi String
Chỉ số bắt đầu từ 0
Chỉ số (index) của mảng trong 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 là 1, và cứ thế tăng dần cho đến phần tử cuối cùng.
int firstElement = arr[0]; |
→ Truy cập phần tử đầu tiên của mảng
Truy cập ngẫu nhiên
Bạn có thể truy cập trực tiếp bất kỳ phần tử nào trong mảng bằng cách sử dụng chỉ số của nó. Việc truy cập phần tử trong mảng rất nhanh chóng và có độ phức tạp O(1).
int value = arr[2]; |
→ Truy cập phần tử thứ 3 của mảng
Thuộc tính length để lấy kích thước của mảng
Java cung cấp thuộc tính length để truy cập kích thước của mảng, cho phép bạn biết số lượng phần tử mà mảng có.
int length = arr.length; |
→ Lấy kích thước của mảng
Mảng là đối tượng trong Java
Trong Java, mảng được coi là một đối tượng, và nó được cấp phát bộ nhớ trong heap. Điều này cũng có nghĩa là bạn có thể sử dụng các phương thức và thuộc tính của đối tượng như length.
Hỗ trợ mảng nhiều chiều
Java cho phép tạo ra các mảng nhiều chiều (mảng 2 chiều, 3 chiều, v.v.). Phổ biến nhất là mảng 2 chiều, thường được dùng để biểu diễn bảng hay ma trận.
int[][] matrix = new int[3][3]; |
→ Mảng 2 chiều 3x3
Có thể chứa các kiểu dữ liệu nguyên thủy và kiểu đối tượng
Mảng trong Java có thể chứa các kiểu dữ liệu nguyên thủy như int, char, float, cũng như các đối tượng như String, Object, hoặc các đối tượng tùy chỉnh khác.
Hiệu quả trong truy cập và thao tác
Mảng cho phép truy cập ngẫu nhiên vào các phần tử, giúp tiết kiệm thời gian khi cần truy cập phần tử dựa trên chỉ số. Tuy nhiên, do kích thước cố định và thiếu các chức năng thao tác linh hoạt như thêm, xóa phần tử (điều này đòi hỏi các cấu trúc dữ liệu khác như ArrayList), mảng có thể không phù hợp với mọi trường hợp.
Ưu điểm và Nhược điểm của Mảng trong Java
Mảng là một cấu trúc dữ liệu cơ bản và hữu ích trong lập trình Java, nhưng cũng có những ưu và nhược điểm riêng.
Ưu điểm của Mảng trong Java
- Truy cập nhanh: Bạn có thể truy cập trực tiếp đến bất kỳ phần tử nào trong mảng bằng chỉ số của nó, giúp tăng tốc độ thực thi chương trình.
- Sử dụng hiệu quả bộ nhớ: Các phần tử trong mảng được lưu trữ liên tiếp trong bộ nhớ, tận dụng tối đa không gian.
- Đơn giản: Cú pháp sử dụng mảng khá đơn giản và dễ hiểu.
- Đa dạng: Mảng có thể chứa các kiểu dữ liệu khác nhau, từ kiểu nguyên thủy (int, double) đến kiểu đối tượng (String, các đối tượng tự định nghĩa).
Nhược điểm của Mảng trong Java
- Kích thước cố định: Khi khai báo mảng, bạn phải xác định trước kích thước của nó. Nếu muốn thay đổi kích thước, bạn phải tạo một mảng mới và sao chép dữ liệu từ mảng cũ sang.
- Kiểu dữ liệu đồng nhất: Tất cả các phần tử trong mảng phải có cùng một kiểu dữ liệu.
- Nguy cơ tràn bộ nhớ: Nếu bạn cố gắng truy cập vào một phần tử ngoài phạm vi của mảng, sẽ gây ra lỗi ArrayIndexOutOfBoundsException.
- Không linh hoạt: Mảng không tự động điều chỉnh kích thước khi thêm hoặc xóa phần tử.
Các loại mảng trong Java
Có ba loại mảng trong Java. Đó là:
Mảng một chiều
Mảng một chiều trong Java là một cấu trúc dữ liệu cơ bản dùng để lưu trữ một tập hợp các phần tử cùng kiểu dữ liệu theo một thứ tự tuyến tính. Mỗi phần tử trong mảng được xác định bởi một chỉ số duy nhất, bắt đầu từ 0.
Mảng hai chiều
Mảng hai chiều trong Java thực chất là một mảng của các mảng. Nó được sử dụng để biểu diễn dữ liệu có cấu trúc hai chiều, giống như một bảng với các hàng và cột. Mỗi phần tử trong mảng hai chiều được xác định bởi hai chỉ số: chỉ số hàng và chỉ số cột.
Ứng dụng của mảng hai chiều
- Biểu diễn ma trận: Các phép toán trên ma trận như cộng, trừ, nhân ma trận.
- Lưu trữ bảng dữ liệu: Ví dụ: bảng điểm của học sinh, bảng giá sản phẩm.
- Xử lý hình ảnh: Hình ảnh kỹ thuật số có thể được biểu diễn dưới dạng một mảng hai chiều, mỗi phần tử đại diện cho một pixel.
- Các thuật toán: Nhiều thuật toán sử dụng mảng hai chiều như thuật toán tìm đường đi ngắn nhất, thuật toán sắp xếp, ...
Mảng đa chiều
Đây là sự kết hợp của hai hoặc nhiều mảng hoặc mảng lồng nhau . Chúng ta thậm chí có thể sử dụng nhiều hơn hai hàng và cột bằng cách sử dụng mã sau:
Mảng đa chiều trong Java là một cấu trúc dữ liệu mở rộng từ mảng một chiều, cho phép bạn lưu trữ dữ liệu theo nhiều chiều. Nói cách khác, một mảng đa chiều là một mảng của các mảng. Điều này rất hữu ích khi bạn cần biểu diễn dữ liệu có cấu trúc phức tạp hơn, như ma trận, bảng dữ liệu,...
Khai báo một mảng trong Java
Đây là hai cách để bạn khai báo một mảng trong Java.
- kiểu dữ liệu [] tên mảng;
- dataType arrayName[];
dataType - Kiểu dữ liệu của các phần tử trong mảng (ví dụ: int, float, String,...).
arrayName - tên mảng.
Độ dài của mảng trong Java
Độ dài của mảng trong Java là số lượng phần tử mà mảng có thể chứa. Một khi mảng đã được khởi tạo, độ dài của nó sẽ không thể thay đổi.
Để xác định độ dài của một mảng trong Java, chúng ta sử dụng thuộc tính length.
Ứng dụng của độ dài mảng
- Duyệt mảng: Sử dụng length để xác định số lần lặp trong vòng lặp khi duyệt qua các phần tử của mảng.
- Kiểm tra điều kiện: Kiểm tra xem chỉ số có vượt quá giới hạn của mảng hay không để tránh lỗi ArrayIndexOutOfBoundsException.
- Các thuật toán: Nhiều thuật toán trên mảng sử dụng length để tính toán kích thước dữ liệu và điều khiển vòng lặp.
Tại sao độ dài mảng không thể thay đổi?
- Hiệu suất: Nếu độ dài mảng có thể thay đổi, máy tính sẽ phải phân bổ lại bộ nhớ mỗi khi thay đổi kích thước, điều này sẽ làm giảm hiệu suất của chương trình.
- Đơn giản hóa: Việc giữ cho độ dài mảng không đổi giúp cho việc quản lý và sử dụng mảng trở nên đơn giản hơn.
Truy cập phần tử trong mảng
Trong Java, mỗi phần tử trong mảng được xác định bởi một chỉ số (index) duy nhất. Chỉ số này bắt đầu từ 0. Ví dụ, trong một mảng có 5 phần tử, chỉ số của các phần tử sẽ lần lượt là 0, 1, 2, 3, 4.
Để truy cập một phần tử cụ thể trong mảng, bạn sử dụng tên của mảng, theo sau là chỉ số của phần tử đó đặt trong dấu ngoặc vuông.
tên_mảng[chỉ_số]; |
Thay đổi giá trị của phần tử trong mảng
Trong Java, để thay đổi giá trị của một phần tử trong mảng, bạn chỉ cần truy cập phần tử đó thông qua chỉ số (index) của nó và gán giá trị mới. Mảng trong Java có chỉ số bắt đầu từ 0, vì vậy phần tử đầu tiên có chỉ số là 0, phần tử thứ hai là 1, và tiếp tục như vậy.
tên_mảng[chỉ_số] = giá_trị_mới; |
Ví dụ:
numbers[2] = 100; |
Phần tử thứ ba (chỉ số 2) của mảng được thay đổi thành 100.
Kết luận
Hiểu rõ về mảng là bước đầu tiên để bạn có thể làm việc với các cấu trúc dữ liệu phức tạp hơn như danh sách (list), hàng đợi (queue), stack,... trong lập trình Java. Mảng cũng là nền tảng cho việc xây dựng các thuật toán tìm kiếm, sắp xếp và giải quyết nhiều bài toán khác. Sau khi đọc bài viết này, bạn sẽ hiểu được những điều cơ bản về mảng trong Java.