"아미고, 이제 배열이 프로그래밍에 얼마나 유용한지 깨달았기를 바랍니다."

"확실히, 리시! 난 이미 하나 이상의 과제를 해결했어."

"작업에 반복적인 작업이 있었습니까? 반복해서 수행한 작업입니다."

"내가 당신을 올바르게 이해했다면 다른 작업에서 유사한 작업을 의미합니까? 예를 들어 배열의 내용을 표시하기 위해 루프를 사용하는 모든 곳에서 — 그렇게 하는 것이 너무 지겹습니다!"

"예, 제 말은 그렇습니다. Java 제작자는 Java 프로그래머가 배열 작업을 할 때 종종 동일한 코드를 작성한다는 사실을 알아차렸습니다. 예를 들어 배열의 일부를 다른 배열에 복사하는 코드 또는 배열의 각 셀을 동일한 내용으로 채우는 코드가 있습니다. 또는 예: 배열의 내용을 화면에 읽을 수 있는 형식으로 표시하는 코드.

"진정한 프로그래머에게는 한 가지 매우 중요한 규칙이 있습니다. 자신을 반복하지 마십시오. 불필요한 작업을 수행하는 것이 잘못이라는 데 동의할 것입니다. 작업에 대한 대가를 받지 못할 것입니다. 효과적인 작업은 많은 보수를 받습니다. 저를 믿으세요. 덧붙여서, 초보자의 코드는 많은 양의 반복 코드로 즉시 인식할 수 있습니다.

"Java의 제작자는 이것을 고민하고 특수 Arrays클래스(정식 이름은 java.util.Arrays)를 만들어 가장 인기 있는 배열 관련 작업을 넣었습니다."

"음... 아주 흥미롭군. 그럼 정확히 뭐가 들어있지?

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

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()

"그러나 이 toString()방법은 2차원 배열에 관해서는 적합하지 않습니다. 즉, 를 호출하려고 하면 Arrays.toString()익숙한 것을 볼 수 있습니다.

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

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

"그럼 어떻게 해야 할까요? 2차원 배열을 올바르게 표시하려면 어떻게 해야 할까요?"

"Java의 제작자도 이것을 예상했습니다. 이를 위해 Arrays클래스에는 또 다른 특수 메서드가 있습니다. deepToString(). 호출하는 방법은 다음과 같습니다.

String str = Arrays.deepToString(name);

"이 메서드는 2차원, 1차원, 3차원 또는 일반적으로 모든 차원인 배열을 전달할 수 있으며 항상 배열의 요소를 표시합니다.

예:

int[] 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]], [[]]]"

Arrays.equals()

"우리는 화면에 배열을 표시하는 방법을 알아냈습니다. 배열 비교는 어떻습니까? 문자열을 비교하는 데 사용할 수 있는 방법을 기억하십니까?"

"보통 equals방법을 사용합니다!

"예, equals및 또한 equalsIgnoreCase(대소문자를 구분하지 않고 문자열을 비교함).

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

예:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
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(배열의 내용이 다름)

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(내용은 동일합니다)

"고마워요, Rishi! 이 수업은 미래의 내 삶을 더 쉽고 행복하게 만드는 데 꼭 필요한 것입니다. 이제 Arrays 클래스의 메서드를 사용하고 내 프로그램을 훨씬 더 빠르게 작성할 것입니다.

"그게 제가 기대하고 있던 것입니다. 하하. 하지만 Arrays 클래스의 흥미로운 메서드가 전부는 아닙니다. 다음에 다른 방법에 대해 말씀드리겠습니다."