Mảng trong Java - Kiến thức cơ bản cho người mới

Java là một trong những ngôn ngữ lập trình phổ biến nhất trên thế giới. Ngôn ngữ lập trình này đóng vai trò thiết yếu trong bộ công cụ của bất kỳ chuyên gia phát triển ứng dụng và web nào.  Trong bài viết này, chúng ta sẽ nói về mảng trong Java. Mảng là một khái niệm đơn giản nhưng thiết yếu của lập trình Java. Chắc chắn rằng bạn sẽ sử dụng mảng trong hầu hết mọi khía cạnh của lập trình Java. 

Mục lục

Mảng trong Java là gì?

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

ư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.

Bài viết liên quan

JavaFX là gì? - Kiến thức chi tiết từ A - Z về JavaFX
JavaFX là một framework mạnh mẽ để xây dựng các ứng dụng desktop và ứng dụng internet phong phú (RIA) bằng Java. Được thiết kế như một thế hệ kế tiếp của Swing, JavaFX cung cấp một bộ công cụ hiện đại để tạo ra giao diện người dùng trực quan và tương tác.
Sự khác biệt giữa JDK, JRE và JVM trong Java là gì?
Trong số các ngôn ngữ lập trình, Java hiện là ngôn ngữ phổ biến nhất được sử dụng cho các mục đích phát triển. Phần lớn các lập trình viên sử dụng Java để phát triển ứng dụng di động, máy tính để bàn, phát triển game, lập trình back-end, ... Trong quá trình phát triển với Java, JVM, JRE, và JDK đã và đang đóng góp những vai trò vô cùng quan trọng.
JDK là gì? Giới thiệu về Java Development Kit
Khi xây dựng các ứng dụng phần mềm trên Java, JDK có trách nhiệm đẩy nhanh quá trình phát triển và đơn giản hóa dự án. Cùng với JVM (Java Virtual Machine) và JRE (Java Runtime Environment), JDK là một trong những công nghệ cốt lõi được sử dụng trong lập trình Java.
9