JavaRush /Blog Java /Random-VI /Mảng trong Java

Mảng trong Java

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

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. Mảng trong Java

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.
dataType[] arrayName;
int[] myArray;

Object[]
arrayOfObjects;
Nên khai báo mảng theo kiểu này, đây là kiểu Java
2.
dataType arrayName[];
int myArray[];

Object
arrayOfObjects[];
Một cách khai báo mảng kế thừa từ C/C++ cũng hoạt động trong Java
Trong cả hai trường hợp, dataType là loại biến trong mảng. Trong các ví dụ chúng ta đã khai báo hai mảng. Một cái sẽ lưu trữ các số nguyên loại int , cái còn lại sẽ lưu trữ các đối tượng thuộc loại Object . Như vậy, khi khai báo một mảng, nó có tên và kiểu (kiểu của biến mảng). arrayName là tên của mảng.

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. Mảng trong Java - 3Bạ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:
10

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:
Đông xuân hạ thu

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. Mảng trong Java - 4Tạ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

Mảng đa chiều

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. Dưới đây là ba phương pháp hữu ích của lớp này

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

Phương thức này void 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ày String 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:
[I@1540e19d [1, 5, 4, 3, 7] [1, 3, 4, 5, 7] 3 -1
Dòng đầu tiên là nỗ lực hiển thị một mảng mà không có toString , dòng thứ hai hiển thị một mảng sử dụng toString , dòng thứ ba là một mảng được sắp xếp, dòng thứ tư là chỉ mục của số 5 mong muốn trong một mảng được sắp xếp (hãy nhớ rằng chúng ta đang đếm từ bằng 0, vì vậy phần tử thứ tư của mảng có chỉ số 3). Ở dòng thứ năm chúng ta thấy giá trị -1 . Một mảng không có chỉ mục như vậy. Tín hiệu đầu ra cho biết phần tử mong muốn (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 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.
  1. Đôi điều về mảng - Bài viết chi tiết về mảng

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

  3. Mảng đa chiều - bài viết chi tiết về mảng đa chiều kèm ví dụ.

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

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION