So sánh mảng trong Java | Laptrinhcanban.com

So sánh mảng trong Java

Cùng tìm hiểu về cách so sánh mảng trong Java. Bạn sẽ học được 2 cách so sánh 2 mảng trong Java, cũng như cách so sánh các phần tử trong mảng Java để tìm ra phần tử giống và khác nhau sau bài học này.

Có 2 phương pháp so sánh 2 mảng trong Java như sau:

  • Phương thức Arrays.equals : so sánh 2 mảng 1 chiều trong Java
  • Phương thức Arrays.deepEquals : so sánh 2 mảng đa chiều trong Java

Có thể sử dụng toán tử so sánh để so sánh mảng trong Java không?

Thông thường để so sánh hai đối tượng thuộc kiểu dữ liệu nguyên thủy trong Java, chúng ta sẽ sử dụng tới các toán tử so sánh như toán tử so sánh bằng == hoặc toán tử so sánh khác != chẳng hạn.

int a = 7;
int b = 7;

System.out.println(a == b); // true
System.out.println(a != b); // false

Tuy nhiên đối với các loại dữ liệu thuộc kiểu dữ liệu đối tượng như là mảng, thì chúng ta không thể sử dụng các toán tử này để so sánh trong tất cả các trường hợp. Ví dụ kết quả so sánh hai mảng hoàn toàn giống nhau sau đây bằng toán tử == lại cho ra kết quả false:

int[] a = {8, 7, 9};
int[] b = {8, 7, 9};

System.out.println(a == b); // false
System.out.println(a != b); // true

Trường hợp duy nhất có thể dùng toán tử so sánh để so sánh mảng, là khi hai biến mảng cùng tham chiếu đến bản thể của một mảng trong bộ nhớ (thực hiện bởi phép gán) mà thôi.

int[] a = {8, 7, 9};
int[] b = a;

System.out.println(a == b); // true
System.out.println(a != b); // false

Bởi vậy để so sánh mảng trong Java, chúng ta không dùng toán tử so sánh, mà sử dụng tới các phương thức có sẵn sau đây.

So sánh 2 mảng 1 chiều trong Java | Arrays.equals

Để so sánh 2 mảng 1 chiều trong Java, chúng ta sẽ sử dụng tới phương thức equals trong class Arrays.

Arrays.equals là một phương thức thành viên trong class Arrays, có tác dụng kiểm tra tất cả các phần tử trong 2 mảng một chiều Java có giống nhau hay không.

Để sử dụng được phương thức này thì chúng ta cần phải import class Arrays trước với lệnh sau:

import java.util.Arrays;

Sau đó chúng ta sử dụng phương thức Arrays.equals để so sánh 2 mảng 1 chiều trong Java với cú pháp sau đây:

Arrays.equals(array1, array2)

Trong đó array1 và array2 là tên của 2 mảng 1 chiều cần so sánh.

Phương thức Arrays.equals sẽ trả về kết quả true nếu tất cả các phần tử với cùng vị trí của 2 mảng đều giống nhau, nói cách khác là hai mảng đã cho hoàn toàn giống nhau. Ngược lại, chỉ cần 1 phần tử tại một vị trí nào đó khác nhau thì Arrays.equals sẽ trả về kết quả false.

Ví dụ, chúng ta so sánh 2 mảng sau đây:

int[] a = {8, 7, 9};
int[] b = {8, 7, 9};

System.out.println(Arrays.equals(a, b)); // true

Hai mảng trên do có tất cả các phần tử tại các vị trí đều giống nhau, nên được coi là hoàn toàn giống nhau, và kết quả true sẽ được trả về.

Một ví dụ khác khi chúng ta so sánh 2 mảng có các phần tử giống nhau, tuy nhiên thì vị trí phần tử lại khác nhau.

int[] a = {8, 7, 9};
int[] b = {7, 8, 9};

System.out.println(Arrays.equals(a, b)); // false

Trong ví dụ này, mặc dù các phần tử của 2 mảng là giống nhau, nhưng các phần tử tại vị trí index tương ứng là khác nhau, nên 2 mảng sẽ được coi là khác nhau, và kết quả false sẽ được trả về.

Lưu ý, chúng ta cũng có thể sử dụng phương thức Arrays.equals để so sánh giữa 2 mảng có giá trị null, hoặc là giữa 2 mảng cùng tham chiếu đến một bản thế mảng như sau:

/*So sánh 2 biến mảng cùng tham chiếu đến một mảng*/
int[] a = {8, 7, 9};
int[] b = a;

System.out.println(Arrays.equals(a, b)); // true


/*So sánh 2 mảng null*/
String[] c = new String[3];
String[] d = new String[3];

System.out.println(Arrays.equals(c, d)); // true

So sánh 2 mảng đa chiều trong Java | Arrays.deepEquals

Để so sánh 2 mảng 1 chiều trong Java, chúng ta dùng phương thức Arrays.equals. Tuy nhiên đối với các mảng đa chiều thì phương thức này sẽ không đưa ra kết quả chính xác. Ví dụ khi so sánh 2 mảng 2 chiều hoàn toàn giống nhau bằng Arrays.equals thì kết quả true sẽ không được trả về.

int[] a = {{5, 78}, {92,5}};
int[] b = {{5, 78}, {92,5}};

System.out.println(Arrays.equals(a, b)); // false

Bởi vậy, thay vì dùng Arrays.equals thì để so sánh 2 mảng đa chiều trong Java, chúng ta sẽ cần dùng đến phương thức Arrays.deepEquals().

Arrays.deepEquals là một phương thức thành viên trong class Arrays, có tác dụng kiểm tra tất cả các phần tử trong 2 mảng Java đa chiều có giống nhau hay không.

Để sử dụng được phương thức này thì chúng ta cần phải import class Arrays trước với lệnh sau:

import java.util.Arrays;

Sau đó chúng ta sử dụng phương thức Arrays.deepEquals để so sánh 2 mảng đa chiều trong Java với cú pháp sau đây:

Arrays.deepEquals(array1, array2)

Về cách sử dụng của Arrays.deepEquals thì cũng tương tự như với Arrays.Equals mà Kiyoshi đã trình bày ở trên.

Ví dụ, chúng ta so sánh 2 mảng 2 chiều trong Java như sau:

import java.util.Arrays;

class Main{
public static void main(String[] args){

int[][] a = {{8, 78}, {92,5}};
int[][] b = {{8, 78}, {92,5}};

System.out.println(Arrays.deepEquals(a, b)); // true

int[][] c = a;

System.out.println(Arrays.deepEquals(a, c)); // true

int[][] d = {{92,5}, {8, 78}};

System.out.println(Arrays.deepEquals(a, d)); // false

}
}

So sánh các phần tử trong mảng Java

Ngoài việc so sánh 2 mảng có giống nhau hay không, chúng ta cũng có thể so sánh các phần tử trong mảng Java để tìm ra các phần tử giống nhau hoặc khác nhau giữa chúng.

Để làm được việc này, chúng ta đơn giản tạo ra một vòng lặp lồng, lấy từng phần tử trong mảng này để so sánh với toàn bộ phần tử trong mảng còn lại, và tìm ra phần tử giống hoặc khác nó.

Một ví dụ đơn giản, chúng ta so sánh các phần tử trong mảng Java và tìm ra phần tử giống nhau như sau:

class Main{
public static void main(String[] args){

int[] a = {8, 7, 9};
int[] b = {6, 8, 9, 10};

for(int i = 0; i < a.length; i++){
for(int j =0; j<b.length; j++){
if(a[i] == b[j]){
System.out.println(a[i]);
}
}
}

}
}

Kết quả thì các phần tử giống nhau giữa 2 mảng sẽ được in ra màn hình như sau:

8
9

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn các cách so sánh mảng trong Java rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về Java trong các bài học tiếp theo.

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.