CodeGym /Blog Java /Random-ES /Matrices en Java
Autor
Oleksandr Miadelets
Head of Developers Team at CodeGym

Matrices en Java

Publicado en el grupo Random-ES
Imagina armarios en un trastero. Cada uno de ellos tiene su propio número, y cada uno de ellos almacena algún objeto de Equipaje. O una lista de vinos donde cada tipo de vino está numerado y usted ordena dando el número de su bebida. O una lista de estudiantes en la que "Adams" se registra en la primera posición y "Zimmer" en el último. O una lista de pasajeros en un avión, a cada uno de los cuales se le asigna un asiento numerado. En Java, las matrices se utilizan a menudo para trabajar con este tipo de estructuras, es decir, conjuntos de datos homogéneos.

Matrices en el curso de CodeGym

En CodeGym, comienza a trabajar con matrices en el nivel 7 de la búsqueda de sintaxis de Java. Se les dedican tres lecciones , así como 8 tareas en varios niveles para consolidar sus habilidades trabajando con matrices. Pero encontrará arreglos muchas veces durante el curso (en particular, la clase Array se estudiará en la búsqueda de colecciones de Java y como parte de su trabajo futuro.

¿Qué es una matriz?

Una matriz es una estructura de datos que almacena elementos del mismo tipo. Puede pensar en ello como un conjunto de celdas numeradas. Puede poner algunos datos en cada celda (un elemento de datos por celda). Se accede a una celda específica utilizando su número. El número de un elemento en la matriz también se denomina índice . En Java, una matriz es homogénea, es decir, todas sus celdas contienen elementos del mismo tipo. Por lo tanto, una matriz de enteros contiene solo números enteros ( int ), una matriz de cadenas, solo cadenas, y una matriz de instancias de una clase Dog que hemos creado contendrá solo objetos Dog . En otras palabras, Java no nos permitirá poner un número entero en la primera celda de la matriz, una cadena en la segunda y un perro en la tercera.Matrices en Java - 2

Declarar una matriz

¿Cómo se declara una matriz?

Como cualquier variable, una matriz debe declararse en Java. Esto se puede hacer de una de dos maneras. Son equivalentes, pero la primera forma es más consistente con el estilo Java. El segundo es un legado del lenguaje C: muchos programadores de C cambiaron a Java y se mantuvo un método alternativo para su conveniencia. La tabla muestra ambas formas de declarar una matriz en Java:
No. Declarar una matriz, sintaxis de Java Ejemplos Comentario
1.
tipo de datos [] nombre de matriz;

int[] myArray;

Object[] 
arrayOfObjects;  
Es aconsejable declarar una matriz de esta manera. Este es el estilo de Java.
2.
tipo de datos nombre de matriz [];

int myArray[];

Object 
arrayOfObjects[];
Método de declaración de matrices heredado de C/C++, funciona en Java
En ambos casos, dataType es el tipo de las variables en la matriz. En los ejemplos, declaramos dos matrices. Uno almacenará int s, y el otro — Object objetos. Por tanto, una declaración de matriz tiene un nombre y un tipo (el tipo de los elementos de la matriz). ArrayName es el nombre de la matriz.

Crear una matriz

¿Cómo se crea una matriz?

Como cualquier otro objeto, puede crear una matriz Java, es decir, reservarle un lugar en la memoria, utilizando el operador new . Así es como se hace:

new typeOfArray[length]; 
donde typeOfArray es el tipo de matriz y length es su longitud (es decir, el número de celdas) expresada como un número entero ( int). Pero tenga en cuenta que aquí solo asignamos memoria para la matriz; no hemos asociado la matriz declarada con ninguna variable declarada previamente. Por lo general, primero se declara una matriz y luego se instancia, por ejemplo:

int[] myArray; // Array declaration
myArray = new int[10]; // Create (allocate memory for) an array of 10 ints
Aquí creamos una matriz de números enteros llamada myArray , informando al compilador que consta de 10 celdas (cada una de las cuales contendrá un número entero). Sin embargo, es mucho más común usar la siguiente sintaxis abreviada para crear una matriz inmediatamente cuando se declara:

int[] myArray = new int [10]; // Declare the array and allocate memory "in one blow"
Tenga en cuenta:Después de crear una matriz con el operador new , sus celdas contienen valores predeterminados. Para los tipos numéricos (como en nuestro ejemplo), el valor predeterminado es 0, para el tipo booleano es falso y para los tipos de referencia es nulo . Por lo tanto, después de ejecutar esta instrucción

int[] myArray = new int[10];
obtenemos una matriz de diez enteros y, hasta que el programa haga algo para cambiar los valores, cada celda contiene 0.

Puede encontrar más información sobre los arreglos en el artículo " Algo sobre los arreglos "

Longitud de matriz en Java

Como dijimos anteriormente, la longitud de una matriz es la cantidad de elementos que la matriz está diseñada para contener. La longitud de una matriz no se puede cambiar después de crearla. tenga en cuentaque los elementos de la matriz se numeran a partir de cero en Java. Por lo tanto, si tenemos una matriz de 10 elementos, entonces el índice del primer elemento es 0 y el índice del último es 9. Matrices en Java - 3Puede obtener la longitud de la matriz utilizando la variable de longitud . Por ejemplo:

int[] myArray = new int[10]; // Create an int array for 10 elements and name it myArray
System.out.println(myArray.length); // Display the array's length, i.e. the number of elements we can put into the array
Producción:

10

Inicializar una matriz y acceder a sus elementos

Ahora sabemos cómo crear una matriz en Java. El proceso no nos da una matriz vacía, sino una matriz llena de valores predeterminados. Por ejemplo, para una matriz int , esto es 0, y si tenemos una matriz de cualquier tipo de referencia, el valor predeterminado en cada celda es nulo . Accedemos a un elemento del array (por ejemplo, para establecer su valor, mostrarlo en pantalla o realizar alguna operación con él) por su índice. La inicialización de la matriz es el proceso de llenar una matriz con valores específicos (que no sean los predeterminados). Ejemplo: vamos a crear una matriz de cadenas para las 4 estaciones y llenarla con los nombres de las estaciones.

String[] seasons = new String[4]; /* Declare and create an array. Java allocates memory for an array of 4 strings, and each cell is set to null (since String is a reference type) */ 

seasons[0] = "Winter"; /* We set the first cell, i.e. the cell with index zero, to "Winter". Here we access the zeroth element of the array and write a specific value to it. */ 
seasons[1] = "Spring"; // We follow a similar procedure for the cell with index 1 (the second cell)
seasons[2] = "Summer"; // ... index 2
seasons[3] = "Autumn"; // and finally, index 3
Ahora los nombres de las estaciones están escritos en las cuatro celdas de nuestra matriz. Podríamos inicializar la matriz de una manera diferente, combinando la declaración y la inicialización:

String[] seasons = new String[] {"Winter", "Spring", "Summer", "Autumn"};
Además, el operador new se puede omitir:

String[] seasons = {"Winter", "Spring", "Summer", "Autumn"};

¿Cómo se muestra una matriz en la pantalla en Java?

Puede mostrar los elementos de la matriz en la pantalla (es decir, en la consola) mediante un bucle for . Otra forma más corta de mostrar una matriz se tratará en el párrafo titulado " Métodos útiles para trabajar con matrices ". Mientras tanto, eche un vistazo a este ejemplo en el que se muestra una matriz mediante un bucle:

String[] seasons = new String {"Winter", "Spring", "Summer", "Autumn"}; 
for (int i = 0; i < 4; i++) {
System.out.println(seasons[i]); 
}
El programa mostrará lo siguiente:

Winter 
Spring 
Summer 
Autumn

Matrices unidimensionales y multidimensionales en Java

Pero, ¿qué pasa si no queremos crear una matriz de números, cadenas u otros objetos, sino una matriz de matrices? Java te permite hacer esto. El tipo de arreglo con el que ya estamos familiarizados ( int[] myArray = new int[8] ) se conoce como arreglo unidimensional. Pero una matriz de matrices se llama matriz bidimensional. Es como una tabla que tiene un número de fila y un número de columna. O, si ha aprendido los conceptos básicos del álgebra lineal, puede considerarlo como una matriz. Matrices en Java - 4¿Por qué necesitamos tales arreglos? Pues para programar matrices y tablas, así como otros objetos que tengan una estructura similar. Por ejemplo, un tablero de ajedrez se puede representar mediante una matriz de 8x8. Una matriz multidimensional se declara y crea de la siguiente manera:

Int[][] myTwoDimentionalArray = new int[8][8];
Esta matriz tiene exactamente 64 elementos: myTwoDimentionalArray[0][0] , myTwoDimentionalArray[0][1] , myTwoDimentionalArray[1][0] , myTwoDimentionalArray[1][1] y así sucesivamente hasta myTwoDimentionalArray[7][7] . Entonces, si lo usamos para representar un tablero de ajedrez, entonces A1 corresponde a myTwoDimentionalArray[0][0] y E2 corresponde a myTwoDimentionalArray[4][1] . Pero, ¿hasta dónde podemos llevar esto? En Java, puede especificar una matriz de matrices... una matriz de matrices de matrices, y así sucesivamente. Por supuesto, las matrices tridimensionales y de mayor dimensión se usan muy raramente. Dicho esto, podría usar una matriz tridimensional para programar un cubo de Rubik, por ejemplo.

Métodos útiles para trabajar con arreglos

Java tiene la clase java.util.Arrays para trabajar con arreglos. En general, las operaciones más comunes que se realizan en las matrices son la inicialización (relleno con elementos), la recuperación de un elemento (por índice), la clasificación y la búsqueda. La búsqueda y clasificación de matrices son temas para otro día. Por un lado, es una buena práctica escribir varios algoritmos de búsqueda y clasificación usted mismo. Por otro lado, todos los mejores algoritmos ya se han implementado e incluido en las bibliotecas estándar de Java, y puedes usarlos legalmente. Aquí hay tres métodos útiles en esta clase.

Ordenar una matriz

El método void sort(int[] myArray, int fromIndex, int toIndex) ordena una matriz o subarreglo de enteros en orden ascendente.

Buscando un elemento en una matriz

int binarySearch(int[] myArray, int fromIndex, int toIndex, int key) . Este método busca el elemento clave en un arreglo o subarreglo myArray ordenado , desde fromIndex hasta toIndex . Si se encuentra el elemento, devuelve su índice. De lo contrario, devuelve (-fromIndex)-1 .

Convertir una matriz en una cadena

El método String toString(int[] myArray) convierte una matriz en una cadena. En Java, las matrices no anulan toString() . Esto significa que si intenta mostrar una matriz completa de una vez (System.out.println(myArray)) en lugar de un elemento a la vez como en el párrafo titulado " Mostrar una matriz en la pantalla ", obtendrá la nombre de la clase y el hash hexadecimal de la matriz (definido por Object.toString() ). Si es un principiante, es posible que no entienda la explicación sobre el método toString . Inicialmente, no es necesario, pero el uso de este método facilita la visualización de una matriz. Java le permite mostrar fácilmente una matriz sin usar un bucle. El siguiente ejemplo demuestra esto.

Un ejemplo usando sort, binarySearch y toString

Vamos a crear una matriz de enteros, mostrarla usando toString , ordenarla usando el método sort y luego encontrar algún número en ella.

class Main {
    public static void main(String[] args) {
        int[] array = {1, 5, 4, 3, 7}; // Declare and initialize the array
        System.out.println(array); // Try to display our array without using the toString method — the result is a hexadecimal number
        System.out.println(Arrays.toString(array)); // Display the array correctly 
        Arrays.sort(array, 0, 4); // Sort the entire array from the zeroth to the fourth element
        System.out.println(Arrays.toString(array)); // Display the sorted array
        int key = Arrays.binarySearch(array, 5); // Look for the number 5 in the sorted array. 
        // The binarySearch method will return the index of the array element we are searching for
        System.out.println(key); // Display the index of the number we searched for 
System.out.println(Arrays.binarySearch(array, 0)); // Now try to find a number that isn't in the array, 
        // and immediately display the result

    }
}
Producción:

[I@1540e19d 
[1, 5, 4, 3, 7] 
[1, 3, 4, 5, 7] 
3 
-1
La primera cadena es un intento de mostrar la matriz sin usar toString . La segunda es la matriz que se muestra usando toString . La tercera es la matriz ordenada. El cuarto es el índice del número que buscamos (5) en la matriz ordenada (recuerde que contamos desde cero, por lo que el índice del cuarto elemento de la matriz es 3). En la quinta cuerda, vemos -1. Este es un índice de matriz no válido. Señala que el número que buscamos (en este caso, 0) no está en la matriz.

Más sobre métodos en la clase Array

Clase Arrays y su uso : este artículo describe algunos métodos en la clase Array.
La clase Arrays tiene 18 métodos importantes para trabajar con matrices.

Matrices en pocas palabras

  • Características esenciales de una matriz: el tipo de datos colocados en ella, su nombre y su longitud.
    La última propiedad se determina cuando se crea la matriz (cuando se asigna memoria para la matriz). Las dos primeras propiedades se determinan cuando se declara la matriz.

  • El tamaño de la matriz (número de celdas) debe ser un int

  • Es imposible cambiar la longitud de una matriz después de crearla.

  • Se puede acceder a un elemento de matriz por su índice.

  • Los elementos de las matrices, como todo lo demás en Java, se numeran a partir de cero.

  • Después de que se crea una matriz, se llena con valores predeterminados.

  • Los arreglos en Java no son lo mismo que los arreglos en C++. Son casi como punteros a matrices dinámicas.

Materiales útiles sobre arreglos

¿Quieres saber más sobre matrices? Echa un vistazo a los artículos a continuación. Se incluye una gran cantidad de material interesante y útil sobre este tema.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION