CodeGym /Các khóa học /JAVA 25 SELF /Lớp Arrays: sort, fill, copyOf, equals

Lớp Arrays: sort, fill, copyOf, equals

JAVA 25 SELF
Mức độ , Bài học
Có sẵn

1. Giới thiệu

Mảng trong Java — công cụ mạnh mẽ, nhưng cú pháp cơ bản dễ nhanh chóng rơi vào công việc lặp lại. Lớp java.util.Arrays — tập hợp các phương thức tĩnh để làm việc với mảng: sắp xếp, sao chép, so sánh, in định dạng và hơn thế nữa. Không cần tạo đối tượng — tất cả phương thức đều là tĩnh và được gọi qua tên lớp.

Để sử dụng các phương thức, hãy thêm import ở đầu tệp:

import java.util.Arrays;

Nếu quên import, trình biên dịch sẽ báo rằng Arrays “không được tìm thấy” — đây không phải là lỗi mà là hành vi dự kiến khi không có import.

2. Sắp xếp mảng: Arrays.sort

Cách hoạt động của Arrays.sort

Cú pháp


Arrays.sort(massiv);
Arrays.sort(massiv, nachalnyyIndeks, konechnyyIndeks);
Sắp xếp toàn bộ mảng hoặc một đoạn con

Phương thức sắp xếp “tại chỗ” — thay đổi mảng gốc và không trả về mảng mới. Muốn giữ thứ tự ban đầu? Hãy sao chép mảng trước.

Ví dụ: sắp xếp mảng số nguyên

int[] scores = {5, 2, 9, 1, 7};
Arrays.sort(scores); // Sắp xếp tăng dần

System.out.println("Mảng đã được sắp xếp: " + Arrays.toString(scores));
// Sẽ in: [1, 2, 5, 7, 9]

Ví dụ: sắp xếp mảng chuỗi

String[] names = {"Vasya", "Petya", "Anya", "Igor"};
Arrays.sort(names);

System.out.println(Arrays.toString(names));
// [Anya, Igor, Petya, Vasya]

Lưu ý: chuỗi được sắp xếp theo thứ tự từ điển (theo bảng chữ cái), số — theo thứ tự tăng dần.

Sắp xếp một phần của mảng

int[] arr = {7, 5, 3, 1, 9, 8};
Arrays.sort(arr, 1, 4); // sắp xếp các phần tử từ chỉ số 1 đến 3 (4 không được tính)

System.out.println(Arrays.toString(arr));
// [7, 1, 3, 5, 9, 8]

Đặc điểm

  • Sắp xếp “tại chỗ”: mảng gốc bị thay đổi.
  • Số — theo thứ tự tăng dần, chuỗi — theo bảng chữ cái.
  • Với đối tượng phức tạp, dùng phiên bản có comparator.

3. Điền (fill) mảng: Arrays.fill

Cú pháp


Arrays.fill(massiv, znachenie);
Arrays.fill(massiv, nachalnyyIndeks, konechnyyIndeks, znachenie);
Điền toàn bộ mảng hoặc một đoạn bằng cùng một giá trị

Phương thức điền tất cả phần tử hoặc phần được chỉ định của mảng bằng cùng một giá trị.

int[] marks = new int[5];
Arrays.fill(marks, 3); // Tất cả phần tử giờ bằng 3
System.out.println(Arrays.toString(marks)); // [3, 3, 3, 3, 3]

Điền một phần của mảng

int[] arr = new int[10];
Arrays.fill(arr, 2, 5, 7); // Sẽ điền các phần tử từ chỉ số 2 đến 4 (5 không được tính)
System.out.println(Arrays.toString(arr));
// [0, 0, 7, 7, 7, 0, 0, 0, 0, 0]

Điền mảng chuỗi

String[] guests = new String[4];
Arrays.fill(guests, "Trống");
System.out.println(Arrays.toString(guests)); // [Trống, Trống, Trống, Trống]

4. Sao chép mảng: Arrays.copyOfArrays.copyOfRange

Arrays.copyOf

Cú pháp


Arrays.copyOf(iskhodnyyMassiv, novayaDlina);
Tạo bản sao mới với độ dài chỉ định

Tạo một mảng mới và sao chép phần tử từ mảng gốc. Nếu độ dài mới lớn hơn độ dài gốc, “đuôi” sẽ được điền bằng các giá trị mặc định (0 cho int, null cho kiểu tham chiếu).

int[] original = {1, 2, 3};
int[] copy = Arrays.copyOf(original, 5);
System.out.println(Arrays.toString(copy)); // [1, 2, 3, 0, 0]

Thu nhỏ mảng

int[] shortCopy = Arrays.copyOf(original, 2);
System.out.println(Arrays.toString(shortCopy)); // [1, 2]

Arrays.copyOfRange

Cú pháp


Arrays.copyOfRange(iskhodnyyMassiv, nachalnyyIndeks, konechnyyIndeks);
Sao chép một đoạn con sang mảng mới
int[] arr = {10, 20, 30, 40, 50};
int[] mid = Arrays.copyOfRange(arr, 1, 4); // Sao chép các phần tử từ chỉ số 1 tới 3
System.out.println(Arrays.toString(mid)); // [20, 30, 40]

5. So sánh mảng: Arrays.equalsArrays.deepEquals

Trong Java không thể so sánh mảng bằng == — cách này chỉ so sánh tham chiếu chứ không phải nội dung:

int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a == b); // false!

So sánh nội dung như thế nào?


Arrays.equals(massiv1, massiv2);
Arrays.deepEquals(matritsa1, matritsa2);
So sánh nông và so sánh sâu
System.out.println(Arrays.equals(a, b)); // true

Với mảng một chiều dùng Arrays.equals, với mảng hai chiều trở lên — Arrays.deepEquals.

Ví dụ: so sánh mảng hai chiều

int[][] matrix1 = {{1, 2}, {3, 4}};
int[][] matrix2 = {{1, 2}, {3, 4}};

System.out.println(Arrays.equals(matrix1, matrix2));     // false!
System.out.println(Arrays.deepEquals(matrix1, matrix2)); // true

6. In mảng đẹp: Arrays.toStringArrays.deepToString

In trực tiếp mảng sẽ cho một chuỗi khó đọc:

int[] arr = {1, 2, 3};
System.out.println(arr); // [I@7a81197d

Cú pháp


Arrays.toString(massiv);
Arrays.deepToString(matritsa);
In định dạng cho mảng một chiều và đa chiều
System.out.println(Arrays.toString(arr)); // [1, 2, 3]
int[][] matrix = {{1, 2}, {3, 4}};
System.out.println(Arrays.deepToString(matrix)); // [[1, 2], [3, 4]]

7. Những lỗi thường gặp khi làm việc với lớp Arrays

Lỗi 1: cố gắng so sánh mảng bằng ==
Mảng là đối tượng, và == chỉ so sánh tham chiếu. Ngay cả khi giá trị giống nhau, kết quả vẫn là false. Hãy dùng Arrays.equals (cho mảng một chiều) hoặc Arrays.deepEquals (cho mảng đa chiều).

Lỗi 2: quên rằng sắp xếp thay đổi mảng “tại chỗ”
Nếu cần giữ thứ tự ban đầu, hãy tạo bản sao bằng Arrays.copyOf, rồi mới sắp xếp bản sao. Nếu không, mảng gốc sẽ mất thứ tự.

Lỗi 3: hiểu sai về ranh giới trong Arrays.fillArrays.copyOfRange
Các phương thức dùng khoảng nửa mở: chỉ số phải không được tính. Ví dụ, Arrays.fill(arr, 2, 5, 9) sẽ điền các chỉ số 2, 3, 4, còn phần tử có chỉ số 5 sẽ không bị chạm tới.

Lỗi 4: cố gắng in mảng trực tiếp
Gọi System.out.println(arr) sẽ in biểu diễn kỹ thuật. Hãy dùng Arrays.toString cho mảng một chiều và Arrays.deepToString cho mảng đa chiều.

Lỗi 5: so sánh mảng đa chiều bằng Arrays.equals
Phương thức chỉ so sánh cấp độ trên cùng (tham chiếu tới mảng con). Để so sánh nội dung, hãy dùng Arrays.deepEquals.

1
Khảo sát/đố vui
, cấp độ , bài học
Không có sẵn
Mảng
Làm quen với mảng
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION