Mảng trong Java

⚡ Tóm tắt thông minh

Mảng trong Java Chúng là các vùng chứa có kích thước cố định, dựa trên chỉ mục, lưu trữ các phần tử của một kiểu dữ liệu trong bộ nhớ liền kề, cung cấp khả năng truy cập với thời gian không đổi, kiểm tra giới hạn tích hợp và trường độ dài, khiến chúng trở thành nền tảng cho hầu hết các bộ sưu tập thư viện chuẩn.

  • 📦 Kích thước cố định: Mảng chứa một số lượng phần tử nhất định thuộc cùng một kiểu dữ liệu.
  • 🔢 Chỉ số dựa trên cơ số 0: Các phần tử có độ dài từ 0 đến âm một.
  • 🧩 Hai loại: Java bao gồm mảng một chiều và mảng đa chiều.
  • 🛠️ Ba bước: Mỗi mảng được khai báo và xây dựng bằng newvà đã được khởi tạo.
  • 🛡️ Kiểm tra giới hạn: JVM ném ra ArrayIndexOutOfBoundsException vượt qua vị trí cuối cùng.
  • ↩️ Theo nguồn tham khảo: Các thay đổi về phần tử được thực hiện bên trong một phương thức sẽ được lưu giữ cho đối tượng gọi phương thức đó.
  • 📏 Trường độ dài: Mỗi mảng đều hiển thị length để lặp lại một cách an toàn.

Mảng trong Java

Một Java Mảng?

A Java mảng Đây là một cấu trúc có kích thước cố định, lưu trữ các phần tử của một kiểu dữ liệu trong vùng nhớ liền kề. Mỗi phần tử được truy cập bằng chỉ mục dựa trên 0, vì vậy phần tử đầu tiên nằm ở vị trí 0. 0 và cuối cùng là tại length - 1Mảng kế thừa từ Object và thực hiện SerializableCloneablevà có thể chứa các kiểu dữ liệu nguyên thủy hoặc tham chiếu đối tượng.

Mảng thay thế các dãy dài các biến được đánh số. Hãy xem xét sáu số nguyên độc lập:

x0 = 0;
x1 = 1;
x2 = 2;
x3 = 3;
x4 = 4;
x5 = 5;

Sáu giá trị giống nhau này tồn tại trong một mảng duy nhất có độ dài sáu:

x[0] = 0;
x[1] = 1;
x[2] = 2;
x[3] = 3;
x[4] = 4;
x[5] = 5;

A vòng lặp Biến có thể điều khiển chỉ mục trong ngoặc, do đó ba dòng xử lý mọi phần tử thay vì sáu bản sao:

for (int count = 0; count < 5; count++) {
    System.out.println(x[count]);
}

Các loại Mảng trong Java

Java Mảng có hai dạng:

  1. Mảng một chiều: một danh sách phẳng các phần tử.
  2. Mảng đa chiều: Một mảng các mảng, được sử dụng cho lưới và ma trận.

Biến mảng: Khai báo, tạo và khởi tạo

Sử dụng mảng là một cách quy trình ba bước: khai báo, xây dựng với newSau đó khởi tạo.

1) Khai báo mảng

Cú pháp:

<elementType>[] <arrayName>;

or (hình thức kiểu C cũ, vẫn còn hiệu lực):

<elementType> <arrayName>[];

Ví dụ:

int[] intArray;   // canonical form: brackets on the type
int intArray2[];  // legacy C-style form, discouraged in new code

2) Xây dựng mảng

Cú pháp:

arrayName = new dataType[size];

Ví dụ:

intArray = new int[10]; // defines that intArray will store 10 integer values

Kết hợp giữa tuyên bố và thi công:

int[] intArray = new int[10];

3) Khởi tạo mảng

intArray[0] = 1; // assigns 1 to the first element (index 0)
intArray[1] = 2; // assigns 2 to the second element (index 1)

Khai báo và khởi tạo trong một bước sử dụng một mảng hằng:

int[] intArray = {1, 2, 3, 4};
// initialises an integer array of length 4 where the first element is 1,
// the second element is 2, and so on.

Chương trình mảng đầu tiên trong Java

Bước 1) Sao chép đoạn mã sau vào trình soạn thảo:

class ArrayDemo {
    public static void main(String args[]) {
        int array[] = new int[7];

        for (int count = 0; count < 7; count++) {
            array[count] = count + 1;
        }

        for (int count = 0; count < 7; count++) {
            System.out.println("array[" + count + "] = " + array[count]);
        }

        // System.out.println("Length of Array  =  " + array.length);
        // array[8] = 10;
    }
}

Bước 2) Lưu, biên dịch và chạy mã. Quan sát kết quả đầu ra.

Đầu ra mong đợi:

array[0] = 1
array[1] = 2
array[2] = 3
array[3] = 4
array[4] = 5
array[5] = 6
array[6] = 7

Bước 3) If x là một tham chiếu mảng, x.length Trả về số thứ tự vị trí của nó. Bỏ dấu chú thích ở dòng đầu tiên và chạy lại:

Length of Array  =  7

Bước 4) Không giống như C, Java Chương trình kiểm tra giới hạn mọi truy cập mảng. Hãy bỏ dấu chú thích ở dòng thứ hai và chạy lại:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8
        at ArrayDemo.main(ArrayDemo.java:11)
Command exited with non-zero status 1

Bước 5) JVM ném ra ArrayIndexOutOfBoundsExceptionTrong ngôn ngữ C, thao tác truy cập tương tự sẽ trả về dữ liệu rác từ vùng nhớ liền kề thay vì báo lỗi.

Java Mảng: Truyền theo tham chiếu

Mảng được truyền vào các phương thức bằng tham chiếu. Phương thức nhận một bản sao của tham chiếu, do đó các thay đổi về phần tử được thực hiện bên trong phương thức sẽ hiển thị cho người gọi.

Ví dụ: mảng được truyền theo tham chiếu.

Bước 1) Sao chép đoạn mã sau vào trình soạn thảo:

class ArrayDemo {
    public static void passByReference(String a[]) {
        a[0] = "Changed";
    }

    public static void main(String args[]) {
        String[] b = {"Apple", "Mango", "Orange"};
        System.out.println("Before Function Call    " + b[0]);
        ArrayDemo.passByReference(b);
        System.out.println("After Function Call    " + b[0]);
    }
}

Bước 2) Lưu, biên dịch và chạy mã. Quan sát kết quả đầu ra.

Đầu ra mong đợi:

Before Function Call    Apple
After Function Call    Changed

Mảng đa chiều trong Java

Mảng đa chiều là mảng của các mảng. Thêm một cặp dấu ngoặc vuông cho mỗi chiều. Để tạo một lưới số nguyên 2 chiều với bốn hàng và năm cột:

int[][] twoD = new int[4][5];

Bạn chỉ cần xác định kích thước chiều đầu tiên (bên trái nhất) trước. Các chiều còn lại có thể được phân bổ riêng biệt, và mỗi hàng có thể có chiều dài riêng, tạo nên Java mảng 2 chiều đúng mảng răng cưa.

Ví dụ:

public class Guru99 {
    public static void main(String[] args) {
        // Create a 2-dimensional array with 4 rows and 4 columns.
        int[][] twoD = new int[4][4];

        // Assign three elements to it.
        twoD[0][0] = 1;
        twoD[1][1] = 2;
        twoD[3][2] = 3;

        System.out.print(twoD[0][0] + " ");
    }
}

Đầu ra mong đợi:

1

Câu Hỏi Thường Gặp

A Java Mảng là một vùng chứa có kích thước cố định, lưu trữ các phần tử thuộc một kiểu dữ liệu duy nhất. Mỗi phần tử được truy cập bằng chỉ mục dựa trên chỉ số 0, và mọi mảng đều có trường độ dài với số lượng phần tử tương ứng.

Khai báo bằng int[] arr, tạo bằng new int[size], sau đó gán theo chỉ số. Để thực hiện cả ba bước trong một dòng, hãy sử dụng cú pháp hằng số như int[] arr = {1, 2, 3, 4}.

Java Hỗ trợ mảng một chiều và mảng đa chiều. Mảng một chiều là một danh sách phẳng, còn mảng đa chiều là một mảng các mảng được sử dụng cho bảng, lưới và ma trận.

Hãy sử dụng trường độ dài, ví dụ như `arr.length`. Nó trả về số lượng phần tử trong mảng và hoạt động với bất kỳ kiểu mảng nào. Không giống như chuỗi (String), mảng hiển thị độ dài dưới dạng một trường, chứ không phải là một lệnh gọi phương thức.

JVM kiểm tra giới hạn mọi truy cập mảng. Việc đọc hoặc ghi một chỉ mục nhỏ hơn 0 hoặc bằng hoặc lớn hơn độ dài sẽ gây ra ngoại lệ ArrayIndexOutOfBoundsException, ngăn ngừa các lỗi hỏng bộ nhớ thường gặp trong C và C++.

Java Phương thức này truyền các tham số theo giá trị, nhưng đối với mảng, giá trị đó là bản sao của tham chiếu. Phương thức này tác động lên cùng một mảng cơ bản, do đó, các thay đổi phần tử bên trong phương thức sẽ hiển thị cho người gọi.

Các công cụ hỗ trợ viết mã dựa trên học máy nhận diện mẫu khai báo-khởi tạo-khởi tạo và tự động hoàn thành các biến hoặc vòng lặp. Chúng cũng phát hiện các lỗi sai lệch một đơn vị thường gặp có thể gây ra ngoại lệ ArrayIndexOutOfBoundsException khi chạy.

Đúng vậy. GitHub Copilot có thể tự động tạo cấu trúc cho các khai báo mảng, vòng lặp, lệnh gọi Arrays.sort và duyệt ma trận 2 chiều từ một bình luận bằng ngôn ngữ thông thường. RevHãy xem xét các giới hạn được tạo ra trước khi chạy với dữ liệu sản xuất.

Tóm tắt bài viết này với: