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 loại. Nó có thể được coi là một tập hợp các ô được đánh số, mỗi ô có thể chứa một số dữ liệu (một phần tử dữ liệu trên mỗi ô). Việc truy cập vào một ô cụ thể được thực hiện thông qua số của nó. Số lượng phần tử trong mảng còn được gọi là chỉ mục . Trong trường hợp của Java, mảng là đồng nhất, nghĩa là tất cả các ô của nó sẽ lưu trữ các phần tử cùng loại. Vì vậy, một mảng số nguyên chỉ chứa các số nguyên (ví dụ thuộc loại int ), một mảng chuỗi chỉ chứa các chuỗi, một mảng các phần tử của lớp Dog mà chúng ta tạo sẽ chỉ chứa các đối tượng Dog . Nghĩa là, trong Java, chúng ta không thể đặt một số nguyên vào ô đầu tiên của mảng, một Chuỗi ở ô thứ hai và một “con chó” ở ô thứ ba.Khai báo mảng
Làm thế nào để khai báo một mảng?
Giống như bất kỳ biến nào, một mảng trong Java phải được khai báo. Bạn có thể làm điều này theo một trong hai cách. Chúng tương đương nhau, nhưng cái đầu tiên phù hợp hơn với phong cách 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à để thuận tiện cho họ, một phương pháp thay thế đã được để lại). Bảng này hiển thị cả hai cách khai báo một mảng trong Java:KHÔNG. | Khai báo mảng, cú pháp Java | Ví dụ | Một lời bình luận |
---|---|---|---|
1. |
|
|
Nên khai báo mảng theo kiểu này, đây là kiểu Java |
2. |
|
|
Một cách khai báo mảng kế thừa từ C/C++ cũng hoạt động trong Java |
Tạo một mảng
Làm thế nào để 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 dung lượng bộ nhớ cho nó bằng cách sử dụng toán tử mới . Điều này được thực hiện như thế này:new typeOfArray [length];
Trong đó typeOfArray là loại mảng và độ dài là độ dài của mảng (nghĩa là số lượng ô), được biểu thị bằng số nguyên ( int ). Tuy nhiên, ở đây chúng ta chỉ cấp phát bộ nhớ cho mảng mà chưa liên kết mảng đã tạo với bất kỳ biến nào được khai báo trước đó. Thông thường, một mảng được khai báo trước rồi mới được tạo, ví dụ:
int[] myArray; // array declaration
myArray = new int[10]; // creation, that is, allocation of memory for an array of 10 elements of type int
Ở đây chúng ta đã khai báo một mảng các số nguyên được gọi là myArray và sau đó khai báo rằng nó bao gồm 10 ô (mỗi ô sẽ lưu trữ một số nguyên). Tuy nhiên, việc tạo một mảng ngay sau khi khai báo bằng cú pháp tốc ký này là phổ biến hơn nhiều:
int[] myArray = new int[10]; // declaration and allocation of memory "in one bottle"
Ghi chú:Sau khi tạo một mảng bằng cách sử dụng new , các ô của nó chứa đầy 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ị này sẽ là 0, đối với boolean - false , đối với các loại tham chiếu - null . Vì vậy, sau khi hoạt động
int[] myArray = new int[10];
chúng ta nhận được một mảng gồm mười số nguyên và cho đến khi điều này thay đổi trong chương trình, mỗi ô đều chứa số 0.
Thông tin thêm về mảng có thể được tìm thấy 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ế. Độ dài của mảng không thể thay đổi sau khi nó được tạo. Ghi chú:Trong Java, các phần tử mảng được đánh số bắt đầu từ 0. Nghĩa là, nếu chúng ta có một mảng gồm 10 phần tử thì phần tử đầu tiên của mảng sẽ có chỉ mục 0 và phần tử cuối cùng sẽ có chỉ mục 9. Bạn có thể truy cập độ dài của mảng bằng cách sử dụng biến độ dài . Ví dụ:int[] myArray = new int[10]; // created an array of integers with 10 elements and named it myArray
System.out.println(myArray.length); // printed to the console the length of the array, that is, the number of elements that we can put in the array
Đầu ra chương trình:
Khởi tạo một mảng và truy cập các phần tử của nó
Cách tạo mảng trong Java đã rõ ràng rồi. Sau thủ tục này, chúng ta không nhận được một mảng trống mà là một mảng chứa đầy các giá trị mặc định. Ví dụ: trong trường hợp int , các giá trị này sẽ là 0 và nếu chúng ta có một mảng có dữ liệu thuộc loại tham chiếu thì theo mặc định, null được ghi trong mỗi ô . Chúng ta truy cập một phần tử mảng (nghĩa là chúng ta viết một giá trị vào nó hoặc 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ó) theo chỉ mục của nó. Khởi tạo một mảng là lấp đầy nó bằng dữ liệu cụ thể (không phải theo mặc định). Ví dụ: hãy tạo một mảng gồm 4 phần và điền vào đó các giá trị chuỗi - tên của các phần này.String[] seasons = new String[4]; /* declared and created an array. Java allocated memory for an array of 4 strings, and now each cell is null (because the string is a reference type)*/
seasons[0] = "Winter"; /* in the first cell, that is, in the cell with a zero number, we wrote the string Winter. Here we get access to the zero element of the array and write a specific value there */
seasons[1] = "Spring"; // do the same procedure with cell number 1 (second)
seasons[2] = "Summer"; // ...number 2
seasons[3] = "Autumn"; // and with the last one, number 3
Bây giờ tất cả bốn ô trong mảng của chúng ta đều chứa tên của các mùa. Việc khởi tạo cũng có thể được thực hiện khác nhau, kết hợp khởi tạo và khai bá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 cách nào để hiển thị một mảng trong Java trên màn hình?
Bạn có thể hiển thị các phần tử mảng trên màn hình (nghĩa là trên bảng điều khiển), ví dụ: 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 trên màn hình sẽ được thảo luận trong đoạn “Các phương pháp hữu ích để làm việc với mảng” bên dưới. Bây giờ, hãy xem một ví dụ với đầu ra tuần hoàn của một mảng:String[] seasons = new String[] {"Winter", "Spring", "Summer", "Autumn"};
for (int i = 0; i < 4; i++) {
System.out.println(seasons[i]);
}
Kết quả chương trình sẽ cho ra kết quả như sau:
Mảng Java một chiều và đa chiều
Điều gì sẽ xảy ra nếu chúng ta không muốn tạo một mảng số, một chuỗi các chuỗi hoặc một mảng các đối tượng mà là một mảng các mảng? Java cho phép bạn làm điều này. Mảng quen thuộc int[] myArray = new int[8] được gọi là mảng một chiều. Và một mảng mảng được gọi là 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 phần đầu của đại số tuyến tính, trên ma trận. Tại sao lại cần những mảng như vậy? Đặc biệt, để lập trình các ma trận và bảng giống nhau, cũng như các đối tượng có cấu trúc giống chúng. Ví dụ: sân chơi cờ vua có thể được chỉ định dưới dạng mảng 8x8. Mảng nhiều chiều được khai báo và tạo như sau:int[][] myTwoDimentionalArray = new int [8][8];
Có chính xác 64 phần tử trong mảng này: myTwoDimentionalArray[0][0]
, myTwoDimentionalArray[0][1]
, myTwoDimentionalArray[1][0]
, myTwoDimentionalArray[1][1]
v.v. cho đến myTwoDimentionalArray[7][7]
. Vậy nếu ta dùng nó để biểu thị bàn cờ thì ô A1 sẽ biểu thị myTwoDimentionalArray[0][0]
, còn E2 sẽ biểu thị myTwoDimentionalArray[4][1]
. Ở đâu có hai, ở đó có ba. Trong Java, bạn có thể chỉ định một mảng các mảng... một mảng các mảng của các mảng, v.v. Đúng, mảng ba chiều trở lên rất hiếm khi được sử dụng. Tuy nhiên, bằng cách sử dụng mảng ba chiều, bạn có thể lập trình, chẳng hạn như khối Rubik.
Còn gì để đọc |
---|
Các phương pháp hữu ích để làm việc với mảng
Để làm việc với mảng trong Java có lớp java.util.Arrays (mảng trong tiếng Anh có nghĩa là “mảng”). Nói chung, các thao tác sau thường được thực hiện nhất với mảng: điền các phần tử (khởi tạo), truy xuất một phần tử (theo số), sắp xếp và tìm kiếm. Tìm kiếm và sắp xếp mảng là một chủ đề riêng biệt. Một mặt, việc tự mình thực hành và viết một số thuật toán tìm kiếm và sắp xếp sẽ rất hữu ích. Mặt khác, tất cả các phương pháp hay nhất đều đã được viết và đưa vào thư viện Java và có thể được sử dụng hợp pháp.
Các bài viết cần tìm kiếm và sắp xếp: Thuật toán sắp xếp trong lý thuyết và thực hành Triển khai sắp xếp bong bóng trong Java Sắp xếp và tìm kiếm trong khóa học CS50: Thuật toán sắp xếp. Sắp xếp bong bóng |
Sắp xếp một mảng
Phương thức nàyvoid sort(int[] myArray, int fromIndex, int toIndex)
sắp xếp một mảng số nguyên hoặc mảng con của nó theo thứ tự tăng dần.
Tìm kiếm một mảng cho phần tử mong muốn
int binarySearch(int[] myArray, int fromIndex, int toIndex, int key)
. Phương thức này tìm kiếm phần tử chính trong mảng myArray hoặc mảng con đã được sắp xếp sẵn, bắt đầu từ fromIndex và kết thúc bằng toIndex . Nếu phần tử được tìm thấy, phương thức sẽ trả về chỉ mục của nó, nếu không - (-fromIndex)-1
.
Chuyển đổi một mảng thành một chuỗi
Phương thức nàyString toString(int[] myArray)
chuyển đổi mảng thành chuỗi. Vấn đề là trong mảng Java 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 (chứ không phải từng phần tử, như trong phần “ In mảng ra màn hình ”) trực tiếp ra màn hình ( System.out.println(myArray)
), bạn sẽ nhận được tên lớp và mã băm thập lục phân của mảng (điều này đượ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 lời giải thích của phương pháp toString
. Ở giai đoạn đầu, điều này là không cần thiết, nhưng khi sử dụng phương pháp này, đầu ra của mảng sẽ được đơn giản hóa. Java giúp dễ dàng hiển thị một mảng mà không cần sử dụng vòng lặp. Thông tin thêm về điều này trong ví dụ dưới đây.
Ví dụ về 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ó trên màn hình bằng cách sử dụng toString , sắp xếp nó bằng phương thức sắp xếp và tìm một số nào đó trong đó.class Main {
public static void main(String[] args) {
int[] array = {1, 5, 4, 3, 7}; //declaring and initializing the array
System.out.println(array);//trying to display our array on the screen without the toString method - we get a hexadecimal number
System.out.println(Arrays.toString(array));//печатаем массив "правильно"
Arrays.sort(array, 0, 4); // sort the entire array from zero to the fourth member
System.out.println(Arrays.toString(array));//print the sorted array to the screen
int key = Arrays.binarySearch(array, 5); // ищем key - число 5 в отсортированном массиве.
//binarySearch method will return the index of the sorted array element, in which the required number is "hidden"
System.out.println(key);//распечатываем индекс искомого числа
System.out.println(Arrays.binarySearch(array, 0));//а теперь попробуем найти число, которого в массиве нет,
// and immediately display the result on the screen
}
}
Đầu ra chương trình:
Tìm hiểu thêm về các phương thức lớp Array Lớp Arrays và công dụng của nó - bài viết mô tả một số phương thức của lớp Array |
Điều chính về mảng
-
Các đặc điểm chính của một mảng: loại dữ liệu được đặt trong đó, tên và độ dài.
Cái sau được quyết định trong quá trình khởi tạo (cấp phát bộ nhớ cho mảng), hai tham số đầu tiên được xác định khi khai báo mảng. -
Kích thước mảng (số ô) phải được xác định trong int
-
Bạn không thể thay đổi độ dài của mảng sau khi nó được tạo.
-
Một phần tử mảng có thể được truy cập bằng chỉ mục của nó.
-
Trong mảng, cũng như những nơi khác trong Java, các phần tử được đánh số bắt đầu từ 0.
-
Sau quy trình tạo mảng, nó chứa đầy các giá trị mặc định.
-
Mảng trong Java có cấu trúc khác với 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? Mời bạn tham khảo các bài viết dưới đây. Có rất nhiều thông tin thú vị và hữu ích về chủ đề này.-
Đôi điều về mảng - Bài viết chi tiết về mảng
-
Lớp Arrays và công dụng của nó - bài viết mô tả một số phương thức của lớp Array
-
Mảng đa chiều - bài viết chi tiết về mảng đa chiều kèm ví dụ.
-
Trả về một mảng có độ dài bằng 0, không phải null - Tác giả Lập trình hiệu quả Joshua Bloch nói về cách trả về các mảng trống tốt hơn
GO TO FULL VERSION