Skip to main content

Java Arrays - Mảng trong Java

Khái niệm

Java cung cấp cấu trúc dữ liệu, gọi là mảng (array), để lưu trữ các phần tử có cùng kiểu dữ liệu. Mảng được sử dụng để lưu trữ bộ sưu tập dữ liệu, nhưng người ta thường biết đến mảng lưu trữ các phần tử có cùng kiểu dữ liệu nhiều hơn.

Thay vì khai báo từng biến một, chẳng hạn như số 0, số 1... và số 99, bạn có thể khai báo một biến mảng như: số và sau đó sử dụng các số [0], số [1]... và số [99] để biểu diễn từng biến một.

Khai báo mảng trong Java

Để sử dụng một mảng trong chương trình, trước hết bạn phải khai báo biến để tham chiếu mảng, và phải chỉ định loại mảng mà biến có thể tham chiếu. Dưới đây là cú pháp khai báo biến mảng trong Java:

Cú pháp:

dataType[] arrayRefVar = new dataType[arraySize];

Hoặc:

dataType arrayRefVar[] = new dataType[arraySize];

Hoặc ngoài ra bạn có thể tạo các mảng trong Java bằng cách sử dụng cú pháp dưới đây:

dataType[] arrayRefVar = {value0, value1, ..., valuek};

Lưu ý:

Cú pháp dataType[] arrayRefVar được ưu tiên hơn. Còn cú pháp dataType arrayRefVar[] có nguồn gốc từ ngôn ngữ C/C++ và được chấp nhận trong Java.

Phương thức hoạt động của mảng

Một mảng sẽ có chỉ số index từ 0 đến n - 1 (n là số lượng phần tử của mảng).

Ví dụ: Khởi tạo mảng số nguyên 10 phần tử, có giá trị tuần tự từ 1 đến 10. Và xuất các giá trị của mảng ra màn hình console.

public class Main {
 
    public static void main(String[] args) {
 
        int[] arr = new int[10];
        for (int i = 0; i < 10; i++) {
            arr[i] = i + 1;
        }
 
        for(int item : arr) {
            System.out.print(item + " ");
        }
 
    }
}

arrays-in-java-.jpg

Truy xuất các phần tử của mảng

Chúng ta có 2 cách để truy xuất các phần tử của mảng:

Truy xuất trực tiếp

public class Main {
 
    public static void main(String[] args) {
 
        // Khoi tao mang
        int[] arr = new int[10];
        for (int i = 0; i < 10; i++) {
            arr[i] = i + 1;
        }
 
        System.out.println(arr[5]);
 
    }
}

Chú ý nếu index vượt ra khoảng chưá của mảng thì chúng ta sẽ nhận một exception. Khoảng hợp lệ 0 đến n – 1 (n số lượng phần tử của mảng).

Khi mình truy xuất arr[10] là vị trí không hợp lệ mình sẽ được kết quả sau:

Exception in thread “main” ava.lang.ArrayIndexOutOfBoundsException: 10
at Main.main(Main.java:11)

Truy xuất tuần tự

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

for(int i = 0; i < 10; i++) {
    System.out.println(i);
}

- Sử dụng foreach:

for(int item : arr) {
	System.out.println(item);
}
Passing by reference

Khi bạn truyền java vào một method, các thay đổi trên mảng sẽ được cập sau khi kết thúc method.

Ví dụ: Tăng mỗi phần tử trong mảng lên mảng và in ra màn hình console.

public class Main {
 
    public static void main(String[] args) {
 
        // Khoi tao mang
        int[] arr = new int[10];
        for (int i = 0; i < 10; i++) {
            arr[i] = i + 1;
        }
 
        increment(arr);
 
        for(int item : arr) {
            System.out.print(item + " ");
        }
    }
 
    public static void increment(int[] arr) {
        for (int i = 0; i < 10; i++) {
            arr[i] += 1;
        }
    }
}

Output: 2 3 4 5 6 7 8 9 10 11

Chúng ta thấy hàm increment() đã thay đổi các giá trị trong mảng. Vì vậy ở hàm main truy xuất được mảng đã được update bởi increment().

Thao tác cơ bản trên array

Java cung cấp cho chúng ta một số thao tác cơ bản mà chúng ta thường xuyên sử dụng như sắp xếp, so sánh etc, đựơc implement trong class java.util.Arrays.

STT Method
1

public static int binarySeach(Object[] a, Object key)

Tìm kiếm phần tử key trong mảng, điều kiện mảng đã được sắp xếp

2

public static boolean equals(long[] a, long[] a2)

So sánh 2 mảng, trả về true nếu bằng nhau(index, value), ngược lại false

3

public static void fill(int[] a. int val)

Khởi tạo mảng với giá trị được gán sẵn val

4

public static void sort(Object[] a)

Sắp xếp mảng tăng dần