1. Arrays클래스

앞에서 언급했듯이 배열은 프로그래밍에 매우 유용하고 자주 사용됩니다.

Java 제작자는 Java 프로그래머가 배열로 작업할 때 동일한 코드를 작성하는 경우가 많다는 사실을 금방 알아차렸습니다. 예를 들어, 배열의 일부를 다른 배열에 복사하고, 배열의 각 셀을 동일한 값으로 채우는 코드를 작성하고, 배열의 내용을 편리한 형식으로 표시하는 등의 작업을 수행합니다.

그래서 그들은 특별한 Arrays클래스(정식 이름은 java.util.Arrays)를 만들어 가장 인기 있는 배열 관련 작업을 넣었습니다.

모든 경우에 대한 많은 방법이 있지만 먼저 가장 간단하고 가장 자주 사용되는 10가지 방법만 고려할 것입니다.


2.Arrays.toString()

우리가 살펴볼 첫 번째 방법은 Arrays.toString(). 그러나 먼저 약간의 배경 지식입니다.

Java의 각 배열에는 toString()'배열의 텍스트 표현'을 반환하는 메서드가 있습니다. 다음 문을 사용하여 배열의 텍스트 표현을 얻을 수 있습니다.

String str = name.toString();

여기서 name는 배열 변수의 이름이고 는 str배열의 문자열 표현을 저장할 변수의 이름입니다.

그러나 메서드를 사용하여 배열을 화면에 인쇄하려고 하면 다음과 같은 내용이 표시될 가능성이 큽니다.System.out.println(name)

I@37afeb11

첫 번째 문자는 배열 I임을 의미 int하고 그 뒤의 기호는@ 메모리에 있는 배열의 주소입니다. 한편으로 이것은 정확히 배열 변수에 저장된 정보이지만 다른 한편으로는 다른 것을 예상했습니다.

우리는 배열의 값을 보고 싶었습니다! Arrays.toString()이것이 바로 배열의 값을 표시하는 방법을 고안한 이유입니다 . 우리는 이것을 다음과 같이 부릅니다:

String str = Arrays.toString(name);

예:

int[] array = {1, 2, 3};
String str = Arrays.toString(array);
변수 str에는 다음 문자열이 포함됩니다.
"[1, 2, 3]"
int[] array = {};
String str = Arrays.toString(array);
변수 str에는 다음 문자열이 포함됩니다.
"[]"
String[] array = {"Hi", "How's", "life?"};
String str = Arrays.toString(array);
변수 str에는 다음 문자열이 포함됩니다.
"[Hi, How's, life?]"


삼.Arrays.deepToString()

그러나 2차원 배열을 문자열(표시하기 위해) using the Arrays.toString()메서드로 변환하려고 하면 익숙한 것을 볼 수 있습니다.

[I@37afeb11, I@37afeb21, I@37afeb31]

이것은 2차원 배열의 셀이 1차원 배열에 대한 참조를 저장하기 때문입니다. 그리고 1차원 배열은 어떻게 문자열로 변환됩니까? 위에서 본 그대로입니다.

무엇을 할 수 있습니까? 2차원 배열을 올바르게 표시하려면 어떻게 해야 합니까?

이를 위해 Arrays클래스에는 또 다른 특수 메서드인 deepToString(). 호출하면 다음과 같습니다.

String str = Arrays.deepToString(name);

이 메서드는 2차원, 1차원, 3차원 또는 일반적으로 모든 차원인 배열을 전달할 수 있으며 항상 배열의 요소를 표시합니다.
참고:Arrays.deepToString()방법은 프리미티브의 1차원 배열(예: int[])에서는 작동하지 않습니다.

예:

Integer[] array = {1, 2, 3};
String str = Arrays.deepToString(array);
변수 str에는 다음 문자열이 포함됩니다.
"[1, 2, 3]"
int[][] array = { {1, 1}, {2, 2}, {3, 3} };
String str = Arrays.deepToString(array);
변수 str에는 다음 문자열이 포함됩니다.
"[[1, 1], [2, 2], [3, 3]]"
int[][][] array = { {{1, 2, 3}, {1}}, {{}} };
String str = Arrays.deepToString(array);
변수 str에는 다음 문자열이 포함됩니다.
"[[[1, 2, 3], [1]], [[]]]"


4.Arrays.equals()

화면에 배열을 표시하는 방법을 알아냈지만 배열을 비교하는 것은 어떻습니까?

문자열을 비교하기 위해 equalsequalsIgnoreCase메서드가 있지만 배열에는 어떤 메서드가 있습니까?

좋은 소식은 배열에 equals메서드가 있다는 것입니다. 나쁜 소식은 배열의 내용을 비교하지 않는다는 것입니다. 배열의 메서드 는 연산자 equals와 동일한 작업을 수행합니다 ==. 참조를 비교합니다. 예:

예:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
boolean b = x1 == x2;


false(참조가 같지 않음)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
방법 equalsarrays단순히 두 배열의 참조를 비교합니다.

false(참조가 같지 않음)

무엇을 할 수 있습니까? 내용을 기반으로 배열을 어떻게 비교합니까?

그리고 다시 Arrays우리의 구조, 또는 더 구체적으로 그 Arrays.equals()방법이 온다. 이것이 우리가 부르는 방법입니다.

Arrays.equals(name1, name2)

이 메서드는 true배열의 길이가 같고 해당 요소가 동일한 경우 반환됩니다. 그렇지 않으면 를 반환합니다 false.

예:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
방법 equalsarrays 단순히 두 배열의 참조를 비교합니다.

false(참조가 같지 않음)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
Arrays.equals(x1, x2);


true(내용은 동일합니다)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3, 4};
Arrays.equals(x1, x2);


false(배열의 내용이 다름)

5.Arrays.deepEquals()

그리고 이미 짐작하셨겠지만 이 Arrays.equals방법은 2차원 배열에 대해 올바르게 작동하지 않습니다. 이 방법은 2차원 배열을 1차원 배열의 주소인 요소를 가진 1차원 배열처럼 취급합니다.

그래서 다차원 배열( n = 1, 2, 3,...)을 정확하게 비교하기 위해 방법을 생각해 냈습니다 Arrays.deepEquals(). 호출하면 다음과 같습니다.

Arrays.deepEquals(name1, name2)

메서드는 다음을 반환합니다.true배열의 길이가 같고 해당 요소가 동일한 경우. 그렇지 않으면 반환됩니다.false. 배열 내부의 요소도 배열인 경우 Arrays.deepEquals()메서드를 사용하여 이를 비교하는 식입니다.

예:

int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};
x1.equals(x2);
방법 equalsarrays 단순히 두 배열의 참조를 비교합니다.

false(참조가 같지 않음)
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};
Arrays.equals(x1, x2);
이 메서드는 참조를 저장하는 1차원 배열과 비교 Arrays.equals합니다 . 서로 다른 참조를 포함합니다. (배열의 내용이 같지 않음) x1x2
false
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};
Arrays.deepEquals(x1, x2);


true(내용은 동일합니다)