CodeGym /Blog Java /Ngẫu nhiên /Mảng trong Java

Mảng trong Java

Xuất bản trong nhóm
Hãy tưởng tượng tủ trong một phòng lưu trữ. Mỗi người trong số họ có số riêng và mỗi người trong số họ lưu trữ một số đối tượng Hành lý. Hoặc một danh sách rượu trong đó mọi loại rượu đều được đánh số và bạn gọi món bằng cách đưa ra số đồ uống của mình. Hoặc một danh sách học sinh trong đó "Adams" được ghi ở vị trí đầu tiên và "Zimmer" ở cuối cùng. Hoặc danh sách hành khách trên máy bay, mỗi người được chỉ định một ghế được đánh số. Trong Java, mảng thường được sử dụng để làm việc với các cấu trúc như vậy, tức là các tập hợp dữ liệu đồng nhất.

Mảng trong khóa học CodeGym

Trên CodeGym, bạn bắt đầu làm việc với mảng ở Cấp độ 7 của nhiệm vụ Cú pháp Java. Ba bài học được dành cho chúng, cũng như 8 nhiệm vụ ở các cấp độ khác nhau để củng cố kỹ năng làm việc với mảng của bạn. Nhưng bạn sẽ gặp mảng nhiều lần trong suốt khóa học (đặc biệt, lớp Array sẽ được nghiên cứu trong nhiệm vụ Bộ sưu tập Java và là một phần công việc trong tương lai của bạn.

Mảng là gì?

Mảng là một cấu trúc dữ liệu lưu trữ các phần tử cùng kiểu. Bạn có thể coi nó như một tập hợp các ô được đánh số. Bạn có thể đặt một số dữ liệu vào mỗi ô (một phần tử dữ liệu trên mỗi ô). Một ô cụ thể được truy cập bằng cách sử dụng số của nó. Số của phần tử trong mảng còn được gọi là chỉ số . Trong Java, một mảng là đồng nhất, tức là tất cả các ô của nó đều chứa các phần tử cùng kiểu. Do đó, một mảng các số nguyên chỉ chứa các số nguyên ( int ), một mảng các chuỗi — chỉ các chuỗi và một mảng các thể hiện của lớp Dog mà chúng ta đã tạo sẽ chỉ chứa các đối tượng Dog . Nói cách khác, Java sẽ không cho phép chúng ta đặt một số nguyên vào ô đầu tiên của mảng, Chuỗi vào ô thứ hai và Dog vào ô thứ ba.Mảng trong Java - 2

Khai báo một mảng

Làm thế nào để bạn khai báo một mảng?

Giống như bất kỳ biến nào, một mảng phải được khai báo trong Java. Điều này có thể được thực hiện theo một trong hai cách. Chúng tương đương nhau, nhưng cách đầu tiên phù hợp hơn với kiểu Java. Thứ hai là di sản của ngôn ngữ C: nhiều lập trình viên C đã chuyển sang Java và một phương pháp thay thế được giữ lại để thuận tiện cho họ. Bảng hiển thị cả hai cách khai báo một mảng trong Java:
KHÔNG. Khai báo một mảng, cú pháp Java ví dụ Bình luận
1.
kiểu dữ liệu [] tên mảng;

int[] myArray;

Object[] 
arrayOfObjects;  
Nên khai báo một mảng theo cách này. Đây là phong cách Java.
2.
dataType arrayName[];

int myArray[];

Object 
arrayOfObjects[];
Phương thức khai báo mảng kế thừa từ C/C++, hoạt động trong Java
Trong cả hai trường hợp, kiểu dữ liệu là kiểu của các biến trong mảng. Trong các ví dụ, chúng tôi đã khai báo hai mảng. Một cái sẽ lưu trữ int s, cái còn lại — Các đối tượng Object . Như vậy, một khai báo mảng có tên và kiểu (kiểu của các phần tử của mảng). ArrayName là tên của mảng.

Tạo một mảng

Làm thế nào để bạn tạo một mảng?

Giống như bất kỳ đối tượng nào khác, bạn có thể tạo một mảng Java, nghĩa là dành một vị trí trong bộ nhớ cho nó, sử dụng toán tử mới . Đây là cách mà nó được hoàn thành:

new typeOfArray[length]; 
trong đó typeOfArray là loại của mảng và độ dài là độ dài của nó (tức là số lượng ô) được biểu thị dưới dạng số nguyên ( int). Nhưng lưu ý rằng ở đây chúng tôi chỉ cấp phát bộ nhớ cho mảng — chúng tôi chưa liên kết mảng đã khai báo với bất kỳ biến nào đã khai báo trước đó. Thông thường, một mảng được khai báo đầu tiên và sau đó được khởi tạo, ví dụ:

int[] myArray; // Array declaration
myArray = new int[10]; // Create (allocate memory for) an array of 10 ints
Ở đây, chúng tôi đã tạo một mảng các số nguyên được gọi là myArray , thông báo cho trình biên dịch rằng nó bao gồm 10 ô (mỗi ô sẽ chứa một số nguyên). Tuy nhiên, nó phổ biến hơn nhiều khi sử dụng cú pháp viết tắt sau để tạo một mảng ngay lập tức khi nó được khai báo:

int[] myArray = new int [10]; // Declare the array and allocate memory "in one blow"
Xin lưu ý:Sau khi một mảng được tạo bằng toán tử new , các ô của nó chứa các giá trị mặc định. Đối với các loại số (như trong ví dụ của chúng tôi), giá trị mặc định là 0, đối với loại boolean , nó là false và đối với các loại tham chiếu, nó là null . Vì vậy, sau khi thực hiện tuyên bố này

int[] myArray = new int[10];
chúng tôi nhận được một mảng gồm mười số nguyên và cho đến khi chương trình thực hiện điều gì đó để thay đổi các giá trị, mỗi ô chứa 0.

Bạn có thể tìm thêm thông tin về mảng trong bài viết " Đôi điều về mảng "

Độ dài mảng trong Java

Như chúng tôi đã nói ở trên, độ dài của một mảng là số phần tử mà mảng được thiết kế để chứa. Độ dài của một mảng không thể thay đổi sau khi nó được tạo. Xin lưu ýrằng các phần tử mảng được đánh số bắt đầu từ số 0 trong Java. Do đó, nếu chúng ta có một mảng gồm 10 phần tử, thì chỉ số của phần tử đầu tiên là 0 và chỉ số của phần tử cuối cùng là 9. Mảng trong Java - 3Bạn có thể lấy độ dài của mảng bằng cách sử dụng biến độ dài . Ví dụ:

int[] myArray = new int[10]; // Create an int array for 10 elements and name it myArray
System.out.println(myArray.length); // Display the array's length, i.e. the number of elements we can put into the array
Đầu ra:

10

Khởi tạo một mảng và truy cập các phần tử của nó

Bây giờ chúng ta đã biết cách tạo một mảng trong Java. Quá trình này không mang lại cho chúng ta một mảng trống, mà là một mảng chứa đầy các giá trị mặc định. Ví dụ: đối với một mảng int , giá trị này là 0 và nếu chúng ta có một mảng thuộc bất kỳ loại tham chiếu nào, thì giá trị mặc định trong mỗi ô là null . Chúng tôi truy cập một phần tử mảng (ví dụ: để đặt giá trị của nó, hiển thị nó trên màn hình hoặc thực hiện một số thao tác với nó) bằng chỉ mục của nó. Khởi tạo mảng là quá trình điền vào một mảng các giá trị cụ thể (không phải giá trị mặc định). Ví dụ: hãy tạo một mảng chuỗi cho 4 mùa và điền vào đó tên của các mùa.

String[] seasons = new String[4]; /* Declare and create an array. Java allocates memory for an array of 4 strings, and each cell is set to null (since String is a reference type) */ 

seasons[0] = "Winter"; /* We set the first cell, i.e. the cell with index zero, to "Winter". Here we access the zeroth element of the array and write a specific value to it. */ 
seasons[1] = "Spring"; // We follow a similar procedure for the cell with index 1 (the second cell)
seasons[2] = "Summer"; // ... index 2
seasons[3] = "Autumn"; // and finally, index 3
Bây giờ tên của các mùa được ghi vào bốn ô trong mảng của chúng ta. Chúng ta có thể khởi tạo mảng theo một cách khác, kết hợp giữa khai báo và khởi tạo:

String[] seasons = new String[] {"Winter", "Spring", "Summer", "Autumn"};
Hơn nữa, toán tử new có thể được bỏ qua:

String[] seasons = {"Winter", "Spring", "Summer", "Autumn"};

Làm thế nào để bạn hiển thị một mảng trên màn hình trong Java?

Bạn có thể hiển thị các phần tử của mảng trên màn hình (tức là trên bàn điều khiển) bằng cách sử dụng vòng lặp for . Một cách khác, ngắn hơn để hiển thị một mảng sẽ được thảo luận trong đoạn có tiêu đề " Các phương pháp hữu ích để làm việc với mảng ". Trong khi chờ đợi, hãy xem ví dụ này trong đó một mảng được hiển thị bằng vòng lặp:

String[] seasons = new String {"Winter", "Spring", "Summer", "Autumn"}; 
for (int i = 0; i < 4; i++) {
System.out.println(seasons[i]); 
}
Chương trình sẽ hiển thị như sau:

Winter 
Spring 
Summer 
Autumn

Mảng một chiều và nhiều chiều trong Java

Nhưng nếu chúng ta không muốn tạo một mảng số, chuỗi hoặc các đối tượng khác, mà là một mảng các mảng thì sao? Java cho phép bạn làm điều này. Loại mảng mà chúng ta đã quen thuộc ( int[] myArray = new int[8] ) được gọi là mảng một chiều. Nhưng một mảng gồm các mảng được gọi là mảng hai chiều. Nó giống như một bảng có số hàng và số cột. Hoặc, nếu bạn đã học những kiến ​​thức cơ bản về đại số tuyến tính, bạn có thể coi nó như một ma trận. Mảng trong Java - 4Tại sao chúng ta cần những mảng như vậy? Chà, để lập trình ma trận và bảng, cũng như các đối tượng khác có cấu trúc tương tự. Ví dụ, một bàn cờ có thể được biểu diễn bằng một mảng 8x8. Một mảng nhiều chiều được khai báo và tạo như sau:

Int[][] myTwoDimentionalArray = new int[8][8];
Mảng này có chính xác 64 phần tử: myTwoDimentionalArray[0][0] , myTwoDimentionalArray[0][1] , myTwoDimentionalArray[1][0] , myTwoDimentionalArray[1][1], v.v. cho đến myTwoDimentionalArray[7][7] . Vì vậy, nếu chúng ta sử dụng nó để biểu diễn một bàn cờ, thì A1 tương ứng với myTwoDimentionalArray[0][0] và E2 tương ứng với myTwoDimentionalArray[4][1] . Nhưng chúng ta có thể đẩy điều này đi bao xa? Trong Java, bạn có thể chỉ định một mảng của các mảng... một mảng của các mảng của các mảng, v.v. Tất nhiên, mảng ba chiều và mảng chiều cao hơn rất hiếm khi được sử dụng. Điều đó nói rằng, bạn có thể sử dụng một mảng ba chiều để lập trình một khối Rubik chẳng hạn.

Các phương pháp hữu ích để làm việc với mảng

Java có lớp java.util.Arrays để làm việc với mảng. Nói chung, các hoạt động phổ biến nhất được thực hiện trên mảng là khởi tạo (điền các phần tử), truy xuất một phần tử (theo chỉ mục), sắp xếp và tìm kiếm. Tìm kiếm và sắp xếp mảng là chủ đề của một ngày khác. Một mặt, bạn nên tự mình viết một số thuật toán tìm kiếm và sắp xếp. Mặt khác, tất cả các thuật toán tốt nhất đã được triển khai và đưa vào các thư viện Java tiêu chuẩn và bạn có thể sử dụng chúng một cách hợp pháp. Dưới đây là ba phương pháp hữu ích trong lớp này.

Sắp xếp một mảng

Phương thức void sort(int[] myArray, int fromIndex, int toIndex) sắp xếp một mảng số nguyên hoặc mảng con theo thứ tự tăng dần.

Tìm kiếm một phần tử trong mảng

int binarySearch(int[] myArray, int fromIndex, int toIndex, int key) . Phương pháp này tìm kiếm phần tử chính trong một mảng hoặc mảng con myArray đã sắp xếp , từ fromIndex đến toIndex . Nếu mục được tìm thấy, thì nó sẽ trả về chỉ mục của nó. Mặt khác, nó trả về (-fromIndex)-1 .

Chuyển đổi một mảng thành một chuỗi

Phương thức String toString(int[] myArray) chuyển đổi một mảng thành một chuỗi. Trong Java, mảng không ghi đè toString() . Điều này có nghĩa là nếu bạn cố gắng hiển thị toàn bộ mảng cùng một lúc (System.out.println(myArray)) thay vì từng phần tử một như trong đoạn văn có tiêu đề " Hiển thị một mảng trên màn hình ", bạn sẽ nhận được tên của lớp và hàm băm thập lục phân của mảng (được xác định bởi Object.toString() ). Nếu bạn là người mới bắt đầu, bạn có thể không hiểu phần giải thích về phương thức toString . Ban đầu, bạn không cần, nhưng sử dụng phương pháp này sẽ giúp hiển thị một mảng dễ dàng hơn. Java cho phép bạn dễ dàng hiển thị một mảng mà không cần sử dụng vòng lặp. Ví dụ dưới đây chứng minh điều này.

Một ví dụ sử dụng sắp xếp, tìm kiếm nhị phân và toString

Hãy tạo một mảng các số nguyên, hiển thị nó bằng cách sử dụng toString , sắp xếp nó bằng phương thức sắp xếp và sau đó tìm một số trong đó.

class Main {
    public static void main(String[] args) {
        int[] array = {1, 5, 4, 3, 7}; // Declare and initialize the array
        System.out.println(array); // Try to display our array without using the toString method — the result is a hexadecimal number
        System.out.println(Arrays.toString(array)); // Display the array correctly 
        Arrays.sort(array, 0, 4); // Sort the entire array from the zeroth to the fourth element
        System.out.println(Arrays.toString(array)); // Display the sorted array
        int key = Arrays.binarySearch(array, 5); // Look for the number 5 in the sorted array. 
        // The binarySearch method will return the index of the array element we are searching for
        System.out.println(key); // Display the index of the number we searched for 
System.out.println(Arrays.binarySearch(array, 0)); // Now try to find a number that isn't in the array, 
        // and immediately display the result

    }
}
Đầu ra:

[I@1540e19d 
[1, 5, 4, 3, 7] 
[1, 3, 4, 5, 7] 
3 
-1
Chuỗi đầu tiên là một nỗ lực để hiển thị mảng mà không sử dụng toString . Thứ hai là mảng được hiển thị bằng toString . Thứ ba là mảng được sắp xếp. Thứ tư là chỉ số của số mà chúng ta đã tìm kiếm (5) trong mảng đã sắp xếp (hãy nhớ rằng chúng ta đếm từ 0, vì vậy chỉ số của phần tử thứ tư của mảng là 3). Trong chuỗi thứ năm, chúng ta thấy -1. Đây là một chỉ mục mảng không hợp lệ. Nó báo hiệu rằng số chúng tôi đã tìm kiếm (trong trường hợp này là 0) không có trong mảng.

Tìm hiểu thêm về các phương thức trong lớp Array

Lớp Arrays và công dụng của nó — Bài viết này mô tả một số phương thức trong lớp Array
Lớp Arrays có 18 phương thức quan trọng để làm việc với mảng

Mảng một cách ngắn gọn

  • Các đặc điểm cơ bản của một mảng: loại dữ liệu được đặt trong đó, tên và độ dài của nó.
    Thuộc tính cuối cùng được xác định khi mảng được tạo (khi bộ nhớ được cấp phát cho mảng). Hai thuộc tính đầu tiên được xác định khi mảng được khai báo.

  • Kích thước mảng (số ô) phải là một số nguyên

  • Không thể thay đổi độ dài của một mảng sau khi nó được tạo.

  • Một phần tử mảng có thể được truy cập bởi chỉ mục của nó.

  • Các phần tử trong mảng, giống như mọi thứ khác trong Java, được đánh số bắt đầu từ số không.

  • Sau khi một mảng được tạo, nó chứa đầy các giá trị mặc định.

  • Mảng trong Java không giống như mảng trong C++. Chúng gần giống như con trỏ tới mảng động.

Tài liệu hữu ích về mảng

Bạn muốn biết thêm về mảng? Kiểm tra các bài viết dưới đây. Có rất nhiều tài liệu thú vị và hữu ích về chủ đề này.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION