CodeGym /Cursos Java /All lectures for ES purposes /Matrices: una clase auxiliar

Matrices: una clase auxiliar

All lectures for ES purposes
Nivel 1 , Lección 1084
Disponible

"Amigo, espero que ya te hayas dado cuenta de lo útiles que son las matrices en la programación".

"¡Definitivamente, Rishi! Ya he resuelto más de una tarea".

"¿Tus tareas tenían acciones repetitivas? Del tipo que has hecho una y otra vez".

"Si te entendí correctamente, ¿te refieres a acciones similares en diferentes tareas? Por ejemplo, en todas partes usando un bucle para mostrar el contenido de una matriz. ¡Estoy tan cansado de hacer eso!"

"Sí, a eso me refiero. Los creadores de Java notaron que los programadores de Java a menudo escriben el mismo código cuando trabajan con arreglos. Por ejemplo, código para copiar parte de un arreglo a otro arreglo, o código para llenar cada celda de un arreglo con el mismo valor O su ejemplo: código para mostrar el contenido de una matriz en una forma legible en la pantalla.

"Y los verdaderos programadores tienen una regla muy importante: no te repitas. Estarás de acuerdo en que está mal hacer trabajo superfluo, no te pagarán por ello. El trabajo efectivo está bien pagado, créeme. Por cierto, un novato El código es inmediatamente reconocible por la gran cantidad de código repetitivo.

"Los creadores de Java reflexionaron sobre esto y crearon la Arraysclase especial (su nombre completo es java.util.Arrays), poniendo en ella las acciones más populares relacionadas con matrices".

"Hmm... Muy interesante. Entonces, ¿qué tiene exactamente?

"Tiene muchos métodos para cada ocasión, pero primero consideraremos solo 10 de ellos, los más simples y los más utilizados.

Arrays.toString()

"El primer método que veremos es Arrays.toString(). Pero primero, un poco de historia.

"Cada matriz en Java tiene un toString()método, que devuelve una 'representación textual de la matriz'. Puede obtener una representación textual de una matriz utilizando la siguiente declaración:

String str = name.toString();

"¿Dónde nameestá el nombre de la variable de matriz y strel nombre de la variable que almacenará la representación de cadena de la matriz? Amigo, ¿ha intentado imprimir una matriz en la pantalla usando el método?System.out.println(name)

Lo confieso, eso sucedió. Vi un galimatías. Decidí mantenerme fuera de peligro y continuar usando bucles.

"Lo más probable es que hayas visto algo como:

I@37afeb11

"La primera letra Isignifica que es una intmatriz, y los símbolos que siguen @son la dirección de un solo objeto en la memoria. Puede considerarlo como la dirección de la matriz en la memoria. Por un lado, esta es precisamente la información almacenada en el variable de matriz, pero por otro lado, esperabas algo diferente, ¿no?

"¡Exactamente! Estaba planeando ver los valores en la matriz. Esto era lo último que esperaba".

"Y esa es exactamente la razón por la que se les ocurrió el Arrays.toString()método: mostrar los valores de una matriz. Lo llamamos así:

String str = Arrays.toString(name);

Ejemplos:

int[] array = {1, 2, 3};
String str = Arrays.toString(array);
La strvariable contendrá la cadena."[1, 2, 3]"
int[] array = {};
String str = Arrays.toString(array);
La strvariable contendrá la cadena."[]"
String[] array = {"Hi", "How's", "life?"};
String str = Arrays.toString(array);
La strvariable contendrá la cadena."[Hi, How's, life?]"

Arrays.deepToString()

"Sin embargo, el toString()método no es adecuado cuando se trata de matrices bidimensionales. En otras palabras, si intenta llamar a Arrays.toString(), verá algo familiar:

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

"Todo esto se debe a que las celdas de una matriz bidimensional almacenan referencias a matrices unidimensionales. ¿Y cómo se convierten las matrices unidimensionales en una cadena? Exactamente como se ve arriba.

"¿Qué hacer entonces? ¿Cómo mostramos correctamente una matriz bidimensional?"

"Los creadores de Java también anticiparon esto. Con este fin, la Arraysclase tiene otro método especial: deepToString()llamarlo así:

String str = Arrays.deepToString(name);

"A este método se le pueden pasar matrices que son bidimensionales, unidimensionales, tridimensionales o, en general, de cualquier dimensión, y siempre mostrará los elementos de la matriz.

Ejemplos:

int[] array = {1, 2, 3};
String str = Arrays.deepToString(array);
La strvariable contendrá la cadena."[1, 2, 3]"
int[][] array = { {1, 1}, {2, 2}, {3, 3} };
String str = Arrays.deepToString(array);
La strvariable contendrá la cadena."[[1, 1], [2, 2], [3, 3]]"
int[][][] array = { {{1, 2, 3}, {1}}, {{}} };
String str = Arrays.deepToString(array);
La strvariable contendrá la cadena."[[[1, 2, 3], [1]], [[]]]"

Arrays.equals()

"Descubrimos cómo mostrar matrices en la pantalla. ¿Qué hay de comparar matrices? ¿Recuerdas qué métodos podemos usar para comparar cadenas?"

"¡Usualmente uso el equalsmétodo!

"Sí, equalsy también equalsIgnoreCase(que compara cadenas sin importar mayúsculas y minúsculas).

"Buenas noticias: también puede usar el equalsmétodo para arreglos. Malas noticias: no compara el contenido de los arreglos. El equalsmétodo de los arreglos hace lo mismo que el ==operador: compara referencias.

Ejemplos:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1 == x2;
false(las referencias no son iguales)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
El equalsmétodo de arrayssimplemente compara las referencias de dos arreglos.

false(las referencias no son iguales)

"Entonces, ¿qué hacemos? ¿Cómo comparamos matrices en función de su contenido?"

"Nuevamente la Arraysclase viene a nuestro rescate. Más específicamente, su Arrays.equals()método. Así es como lo llamamos:

Arrays.equals(name1, name2)

"El método devuelve truesi las matrices tienen la misma longitud y sus elementos son iguales. De lo contrario, devuelve false.

Ejemplos:

int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
x1.equals(x2);
El equalsmétodo de arrayssimplemente compara las referencias de dos arreglos.

false(las referencias no son iguales)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3};
Arrays.equals(x1, x2);


true(los contenidos son iguales)
int[] x1 = {1, 2, 3};
int[] x2 = {1, 2, 3, 4};
Arrays.equals(x1, x2);


false(los contenidos de las matrices son diferentes)

Arrays.deepEquals()

"Y, como probablemente ya haya adivinado, el Arrays.equalsmétodo no funcionará correctamente para arreglos bidimensionales: trata los arreglos bidimensionales como un arreglo unidimensional cuyos elementos son direcciones de arreglos unidimensionales.

"Por lo tanto, para comparar correctamente matrices multidimensionales ( n = 1, 2, 3,... ), se les ocurrió el Arrays.deepEquals()método. Llamarlo se ve así:

Arrays.deepEquals(name1, name2)

"El método devuelve truesi las matrices tienen la misma longitud y sus elementos son iguales. De lo contrario, devuelvefalse. Si los elementos dentro de la matriz también son matrices, entonces Arrays.deepEquals()se usa el método para compararlos, y así sucesivamente.

Ejemplos:

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

x1.equals(x2);
El equalsmétodo de arrays simplemente compara las referencias de dos arreglos.

false(las referencias no son iguales)
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};

Arrays.equals(x1, x2);
El Arrays.equalsmétodo comparará y como matrices unidimensionales que almacenan referencias. Contienen diferentes referencias. (los contenidos de las matrices no son iguales) x1x2
false
int[][] x1 = {{1, 2, 3}, {4, 5, 6}};
int[][] x2 = {{1, 2, 3}, {4, 5, 6}};

Arrays.deepEquals(x1, x2);



true(los contenidos son iguales)

"¡Gracias, Rishi! Esta lección es justo lo que necesitaba para hacer mi vida más fácil y feliz en el futuro. Ahora usaré los métodos de la clase Arrays y escribiré mis programas aún más rápido.

"Eso es con lo que contaba, ja, ja. Pero estos no son todos los métodos interesantes en la clase Arrays. Te hablaré de otros la próxima vez".

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION