"Amigo, espero que agora você tenha percebido como os arrays são úteis na programação?"

"Definitivamente, Rishi! Já resolvi mais de uma tarefa."

"Suas tarefas tiveram ações repetitivas? Do tipo que você fez várias vezes."

"Se eu entendi corretamente, você quer dizer ações semelhantes em tarefas diferentes? Por exemplo, em todos os lugares usando um loop para exibir o conteúdo de uma matriz - estou tão cansado de fazer isso!"

"Sim, é isso que quero dizer. Os criadores de Java notaram que os programadores de Java geralmente escrevem o mesmo código ao trabalhar com arrays. Por exemplo, código para copiar parte de um array para outro array ou código para preencher cada célula de um array com o mesmo valor. Ou seu exemplo: código para exibir o conteúdo de uma matriz de forma legível na tela.

"E os verdadeiros programadores têm uma regra muito importante: não se repita. Você concordará que é errado fazer um trabalho supérfluo - você não será pago por isso. O trabalho eficaz é bem pago, acredite em mim. Aliás, um novato é código é imediatamente reconhecível pela grande quantidade de código repetitivo.

"Os criadores de Java ponderaram sobre isso e criaram a Arraysclasse especial (seu nome completo é java.util.Arrays), colocando nela as ações relacionadas a matrizes mais populares."

"Hmm... Muito interessante. Então, o que tem exatamente?

"Tem muitos métodos para cada ocasião, mas primeiro vamos considerar apenas 10 deles - os mais simples e mais usados.

Arrays.toString()

"O primeiro método que veremos é Arrays.toString(). Mas primeiro, um pouco de histórico.

"Cada array em Java tem um toString()método, que retorna uma 'representação textual do array'. Você pode obter uma representação textual de um array usando a seguinte declaração:

String str = name.toString();

"Onde nameestá o nome da variável do array, e stré o nome da variável que vai armazenar a string de representação do array. Amigo, você já tentou imprimir um array na tela usando o método?System.out.println(name)

Eu confesso, isso aconteceu. Eu vi alguns jargões. Decidi ficar fora de perigo e continuar usando loops.

"Provavelmente você viu algo como:

I@37afeb11

"A primeira letra Isignifica que é um intarray, e os símbolos depois @são o endereço de um único objeto na memória. Você pode pensar nisso como o endereço do array na memória. Por um lado, esta é precisamente a informação armazenada no variável de array, mas por outro, você esperava algo diferente, não é?"

"Exatamente! Eu estava planejando ver os valores na matriz. Essa era a última coisa que eu esperava."

"E é exatamente por isso que eles criaram o Arrays.toString()método - para exibir os valores de uma matriz. Nós o chamamos assim:

String str = Arrays.toString(name);

Exemplos:

int[] array = {1, 2, 3};
String str = Arrays.toString(array);
A strvariável conterá a string"[1, 2, 3]"
int[] array = {};
String str = Arrays.toString(array);
A strvariável conterá a string"[]"
String[] array = {"Hi", "How's", "life?"};
String str = Arrays.toString(array);
A strvariável conterá a string"[Hi, How's, life?]"

Arrays.deepToString()

"No entanto, o toString()método não é adequado quando se trata de arrays bidimensionais. Em outras palavras, se você tentar chamar Arrays.toString(), verá algo familiar:

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

"Isso tudo porque as células de uma matriz bidimensional armazenam referências a matrizes unidimensionais. E como as matrizes unidimensionais são convertidas em uma string? Exatamente como você vê acima.

"O que fazer então? Como exibir corretamente um array bidimensional?"

"Os criadores de Java também previram isso. Para esse fim, a Arraysclasse tem outro método especial — deepToString(). A chamada se parece com isto:

String str = Arrays.deepToString(name);

"Este método pode passar arrays bidimensionais, unidimensionais, tridimensionais ou, em geral, qualquer dimensão, e sempre exibirá os elementos do array.

Exemplos:

int[] array = {1, 2, 3};
String str = Arrays.deepToString(array);
A strvariável conterá a string"[1, 2, 3]"
int[][] array = { {1, 1}, {2, 2}, {3, 3} };
String str = Arrays.deepToString(array);
A strvariável conterá a string"[[1, 1], [2, 2], [3, 3]]"
int[][][] array = { {{1, 2, 3}, {1}}, {{}} };
String str = Arrays.deepToString(array);
A strvariável conterá a string"[[[1, 2, 3], [1]], [[]]]"

Arrays.equals()

"Nós descobrimos como exibir arrays na tela. Que tal comparar arrays? Você se lembra de quais métodos podemos usar para comparar strings?"

"Eu costumo usar o equalsmétodo!

"Sim, equalse também equalsIgnoreCase(que compara strings sem considerar maiúsculas e minúsculas).

"Boas notícias: você também pode usar o equalsmétodo para arrays. Más notícias: ele não compara o conteúdo de arrays. O equalsmétodo de arrays faz a mesma coisa que o ==operador — ele compara referências.

Exemplos:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1 == x2;
false(as referências não são iguais)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
O equalsmétodo de arrayssimplesmente compara as referências de dois arrays.

false(as referências não são iguais)

"Então, o que fazemos? Como comparamos arrays com base em seu conteúdo?"

"Mais uma vez a Arraysclasse vem em nosso socorro. Mais especificamente, seu Arrays.equals()método. É assim que o chamamos:

Arrays.equals(name1, name2)

"O método retorna truese os arrays tiverem comprimento igual e seus elementos forem iguais. Caso contrário, ele retorna false.

Exemplos:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
O equalsmétodo de arrayssimplesmente compara as referências de dois arrays.

false(as referências não são iguais)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
Arrays.equals(x1, x2);


true(o conteúdo é igual)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3, 4};
Arrays.equals(x1, x2);


false(o conteúdo das matrizes são diferentes)

Arrays.deepEquals()

"E, como você provavelmente já adivinhou, o Arrays.equalsmétodo não funcionará corretamente para arrays bidimensionais: ele trata arrays bidimensionais como um array unidimensional cujos elementos são endereços de arrays unidimensionais.

"Assim, para comparar corretamente arrays multidimensionais ( n = 1, 2, 3,... ), eles criaram o Arrays.deepEquals()método. A chamada fica assim:

Arrays.deepEquals(name1, name2)

"O método retorna truese os arrays tiverem comprimento igual e seus elementos forem iguais. Caso contrário, ele retornafalse. Se os elementos dentro da matriz também forem matrizes, o Arrays.deepEquals()método será usado para compará-los e assim por diante.

Exemplos:

int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};

x1.equals(x2);
O equalsmétodo de arrays simplesmente compara as referências de dois arrays.

false(as referências não são iguais)
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};

Arrays.equals(x1, x2);
O Arrays.equalsmétodo irá comparar e como arrays unidimensionais que armazenam referências. Eles contêm referências diferentes. (o conteúdo das matrizes não são iguais) x1x2
false
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};

Arrays.deepEquals(x1, x2);



true(o conteúdo é igual)

"Obrigado, Rishi! Esta lição é exatamente o que eu precisava para tornar minha vida mais fácil e feliz no futuro. Agora vou usar os métodos da classe Arrays e escrever meus programas ainda mais rápido.

"Era com isso que eu estava contando, ha-ha. Mas esses não são todos os métodos interessantes da classe Arrays. Falarei sobre outros na próxima vez."