JavaRush /Blog Java /Random-ES /Matrices en Java

Matrices en Java

Publicado en el grupo Random-ES
Imagínese celdas en un trastero. Cada uno tiene su propio número y cada uno contiene algún tipo de objeto "Equipaje". O una carta de vinos, en la que están numerados todos los tipos de vino y cuando haces un pedido sólo tienes que indicar el número de la bebida. O una lista de estudiantes en un grupo, en la que el estudiante "Andreev" se escribirá en la primera celda y "Yakovlev" en la última celda. O una lista de pasajeros de avión, a cada uno de los cuales se le asigna un asiento con un número específico. En Java, para trabajar con estructuras similares, es decir, una gran cantidad de datos homogéneos, a menudo se utilizan matrices en Java.

¿Qué es una matriz?

Una matriz es una estructura de datos que almacena elementos del mismo tipo. Se puede considerar como un conjunto de celdas numeradas, cada una de las cuales puede contener algunos datos (un elemento de datos por celda). El acceso a una celda específica se realiza a través de su número. El número de un elemento en una matriz también se llama índice . En el caso de Java, el array es homogéneo, es decir, todas sus celdas almacenarán elementos del mismo tipo. Entonces, una matriz de números enteros contiene solo números enteros (por ejemplo, de tipo int ), una matriz de cadenas contiene solo cadenas, una matriz de elementos de la clase Dog que creamos contendrá solo objetos Dog . Es decir, en Java no podemos poner un número entero en la primera celda de una matriz, un String en la segunda y un “perro” en la tercera. Matrices en Java

Declaración de matriz

¿Cómo declarar una matriz?

Como cualquier variable, se debe declarar una matriz en Java. Puedes hacer esto de dos maneras. Son equivalentes, pero el primero es más acorde con el estilo Java. El segundo es el legado del lenguaje C (muchos programadores de C cambiaron a Java y, por conveniencia, se dejó un método alternativo). La tabla muestra ambas formas de declarar una matriz en Java:
No. Declaración de matriz, sintaxis de Java Ejemplos Un comentario
1.
dataType[] arrayName;
int[] myArray;

Object[]
arrayOfObjects;
Es recomendable declarar un array de esta forma, este es el estilo Java
2.
dataType arrayName[];
int myArray[];

Object
arrayOfObjects[];
Una forma heredada de declarar matrices de C/C++ que también funciona en Java
En ambos casos, tipo de datos es el tipo de variables en la matriz. En los ejemplos declaramos dos matrices. Uno almacenará números enteros de tipo int , el otro almacenará objetos de tipo Object . Por lo tanto, cuando se declara una matriz, tiene un nombre y un tipo (el tipo de variables de la matriz). arrayName es el nombre de la matriz.

Creando una matriz

¿Cómo crear una matriz?

Como cualquier otro objeto, puedes crear una matriz Java, es decir, reservarle espacio de memoria, usando el operador new . Esto se hace así:
new typeOfArray [length];
Donde typeOfArray es el tipo de matriz y length es su longitud (es decir, el número de celdas), expresada en números enteros ( int ). Sin embargo, aquí solo hemos asignado memoria para la matriz, pero no hemos asociado la matriz creada con ninguna variable previamente declarada. Por lo general, primero se declara una matriz y luego se crea, por ejemplo:
int[] myArray; // declaración de matriz
myArray = new int[10]; // creación, es decir, asignación de memoria para una matriz de 10 elementos de tipo int
Aquí declaramos una matriz de números enteros llamada myArray y luego declaramos que consta de 10 celdas (cada una de las cuales almacenará un número entero). Sin embargo, es mucho más común crear una matriz inmediatamente después de la declaración usando esta sintaxis abreviada:
int[] myArray = new int[10]; // declaración y asignación de memoria "en una botella"
Nota:Después de crear una matriz usando new , sus celdas se llenan con valores predeterminados. Para tipos numéricos (como en nuestro ejemplo), será 0, para booleanos , falso , para tipos de referencia, nulos . Así, tras la operación
int[] myArray = new int[10];
obtenemos una matriz de diez números enteros y, hasta que esto cambie durante el programa, cada celda contiene un 0.

Puede encontrar más información sobre las matrices en el artículo " Algo sobre las matrices " .

Longitud de la matriz en Java

Como dijimos anteriormente, la longitud de una matriz es la cantidad de elementos para los que está diseñada la matriz. La longitud de una matriz no se puede cambiar una vez creada. Nota:En Java, los elementos de una matriz se numeran comenzando desde cero. Es decir, si tenemos una matriz de 10 elementos, entonces el primer elemento de la matriz tendrá el índice 0 y el último tendrá el índice 9. Matrices en Java - 3Puede acceder a la longitud de la matriz usando la variable de longitud . Ejemplo:
int[] myArray = new int[10]; // creó una matriz de enteros con 10 elementos y la llamó myArray
System.out.println(myArray.length); // imprimimos en la consola la longitud del arreglo, es decir, la cantidad de elementos que podemos poner en el arreglo
Salida del programa:
10

Inicializar una matriz y acceder a sus elementos

Ya está claro cómo crear una matriz en Java. Después de este procedimiento, no obtenemos una matriz vacía, sino una matriz llena de valores predeterminados. Por ejemplo, en el caso de int estos serán 0, y si tenemos un array con datos de un tipo de referencia, entonces por defecto se escribe null en cada celda . Accedemos a un elemento de matriz (es decir, escribimos un valor en él, lo mostramos en la pantalla o realizamos alguna operación con él) por su índice. Inicializar una matriz es llenarla con datos específicos (no de forma predeterminada). Ejemplo: creemos una matriz de 4 estaciones y llenémosla con valores de cadena: los nombres de estas estaciones.
String[] seasons  = new String[4]; /* declaró y creó una matriz. Java asignó memoria para una matriz de 4 cadenas, y ahora cada celda es nula (porque la cadena es un tipo de referencia)*/

seasons[0] = "Winter"; /* en la primera celda, es decir, en la celda con número cero, escribimos la cadena Winter. Aquí tenemos acceso al elemento cero de la matriz y escribimos un valor específico allí */
seasons[1] = "Spring"; // hacemos el mismo procedimiento con la celda número 1 (segunda)
seasons[2] = "Summer"; // ...Número 2
seasons[3] = "Autumn"; // y con el ultimo, el numero 3
Ahora las cuatro celdas de nuestra matriz contienen los nombres de las estaciones. La inicialización también se puede realizar de forma diferente, combinando inicialización y declaración:
String[] seasons  = new String[] {"Winter", "Spring", "Summer", "Autumn"};
Además, se puede omitir el nuevo operador:
String[] seasons  = {"Winter", "Spring", "Summer", "Autumn"};

¿Cómo mostrar una matriz en Java en la pantalla?

Puede mostrar elementos de matriz en la pantalla (es decir, en la consola), por ejemplo, usando un bucle for . Otra forma más breve de mostrar una matriz en la pantalla se discutirá en el párrafo "Métodos útiles para trabajar con matrices" a continuación. Por ahora, veamos un ejemplo con salida cíclica de una matriz:
String[] seasons  = new String[] {"Winter", "Spring", "Summer", "Autumn"};
for (int i = 0; i < 4; i++) {
System.out.println(seasons[i]);
}
Como resultado, el programa generará el siguiente resultado:
Invierno Primavera Verano Otoño

Matrices Java unidimensionales y multidimensionales

¿Qué pasa si queremos crear no una matriz de números, una matriz de cadenas o una matriz de algunos objetos, sino una matriz de matrices? Java te permite hacer esto. La ya familiar matriz int[] myArray = new int[8] es la llamada matriz unidimensional. Y una matriz de matrices se llama bidimensional. Es como una tabla que tiene un número de fila y un número de columna. O, si aprendiste los inicios del álgebra lineal, en una matriz. Matrices en Java - 4¿Por qué se necesitan tales matrices? En particular, para programar las mismas matrices y tablas, así como objetos que se asemejen a ellas en estructura. Por ejemplo, el campo de juego de ajedrez se puede especificar como una matriz de 8x8. Una matriz multidimensional se declara y crea de la siguiente manera:
int[][] myTwoDimentionalArray = new int [8][8];
Hay exactamente 64 elementos en esta matriz: myTwoDimentionalArray[0][0], myTwoDimentionalArray[0][1], myTwoDimentionalArray[1][0]y myTwoDimentionalArray[1][1]así sucesivamente hasta myTwoDimentionalArray[7][7]. Entonces, si lo usamos para representar un tablero de ajedrez, entonces la celda A1 representará myTwoDimentionalArray[0][0]y E2 representará myTwoDimentionalArray[4][1]. Donde hay dos, hay tres. En Java, puede especificar una matriz de matrices... una matriz de matrices de matrices, y así sucesivamente. Es cierto que rara vez se utilizan matrices tridimensionales o más. Sin embargo, utilizando una matriz tridimensional, es posible programar, por ejemplo, un cubo de Rubik.

Métodos útiles para trabajar con matrices.

Para trabajar con arrays en Java existe una clase java.util.Arrays (arrays en inglés significa “arrays”). En general, las siguientes operaciones se realizan con mayor frecuencia con matrices: llenar con elementos (inicialización), recuperar un elemento (por número), ordenar y buscar. La búsqueda y clasificación de matrices es un tema aparte. Por un lado, es muy útil practicar y escribir usted mismo varios algoritmos de búsqueda y clasificación. Por otro lado, todas las mejores prácticas ya han sido escritas e incluidas en las bibliotecas de Java y pueden usarse legalmente. Aquí hay tres métodos útiles de esta clase.

Ordenar una matriz

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

Buscando en una matriz el elemento deseado

int binarySearch(int[] myArray, int fromIndex, int toIndex, int key). Este método busca el elemento clave en un myArray o subarreglo ya ordenado , comenzando desde fromIndex y terminando en toIndex . Si se encuentra el elemento, el método devuelve su índice, si no, - . (-fromIndex)-1

Convertir una matriz en una cadena

El método String toString(int[] myArray)convierte la matriz en una cadena. La cuestión es que en Java las matrices no anulan toString() . Esto significa que si intenta mostrar la matriz completa (en lugar de elemento por elemento, como en “ Imprimir una matriz en la pantalla ”) directamente en la pantalla ( System.out.println(myArray)), obtendrá el nombre de la clase y el código hash hexadecimal de la matriz. (Esto está definido por Object.toString() ). Si eres principiante es posible que no entiendas la explicación del método toString. En la primera etapa esto no es necesario, pero con este método se simplifica la salida de la matriz. Java facilita la visualización de una matriz sin utilizar un bucle. Más sobre esto en el siguiente ejemplo.

Ejemplo de clasificación, búsqueda binaria y toString

Creemos una matriz de números enteros, mostremosla en la pantalla usando toString , clasifíquela usando el método sort y busquemos algún número en ella.
class Main {
    public static void main(String[] args) {
        int[] array = {1, 5, 4, 3, 7}; // declarando e inicializando la matriz
        System.out.println(array);//intentando mostrar nuestra matriz en la pantalla sin el método toString - obtenemos un número hexadecimal
        System.out.println(Arrays.toString(array));//печатаем массив "правильно"
        Arrays.sort(array, 0, 4); // ordenar la matriz completa desde cero hasta el cuarto miembro
        System.out.println(Arrays.toString(array));// imprime la matriz ordenada en la pantalla
        int key = Arrays.binarySearch(array, 5); // ищем key - число 5 в отсортированном массиве.
        //el método binarySearch devolverá el índice del elemento de matriz ordenado, en el que el número requerido está "oculto"
        System.out.println(key);//распечатываем индекс искомого числа
System.out.println(Arrays.binarySearch(array, 0));//а теперь попробуем найти число, которого в массиве нет,
        // e inmediatamente mostrar el resultado en la pantalla

    }
}
Salida del programa:
[I@1540e19d [1, 5, 4, 3, 7] [1, 3, 4, 5, 7] 3 -1
La primera línea es un intento de mostrar una matriz sin toString , la segunda muestra una matriz usando toString , la tercera es una matriz ordenada, la cuarta es el índice del número deseado 5 en una matriz ordenada (recuerde que estamos contando desde cero, por lo que el cuarto elemento de la matriz tiene un índice 3). En la quinta línea vemos el valor -1 . Una matriz no tiene ese índice. La salida indica que el elemento deseado (en este caso, 0) no está en la matriz.

Más sobre los métodos de la clase Array

La clase Arrays y su uso : el artículo describe algunos métodos de la clase Array

Lo principal de las matrices.

  • Las principales características de una matriz: el tipo de datos que contiene, el nombre y la longitud.
    Esto último se decide durante la inicialización (asignando memoria para la matriz), los dos primeros parámetros se determinan al declarar la matriz.

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

  • No se puede cambiar la longitud de una matriz una vez creada.

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

  • En las matrices, como en otras partes de Java, los elementos se numeran comenzando desde cero.

  • Después del procedimiento de creación de la matriz, se llena con valores predeterminados.

  • Las matrices en Java están estructuradas de manera diferente que en C++. Son casi lo mismo que los punteros a matrices dinámicas.

Materiales útiles sobre matrices.

¿Quieres saber más sobre las matrices? Por favor, eche un vistazo a los artículos a continuación. Hay mucha información interesante y útil sobre este tema.
  1. Algo sobre matrices: buen artículo detallado sobre matrices

  2. La clase Arrays y su uso : el artículo describe algunos métodos de la clase Array

  3. Arreglos multidimensionales : un artículo detallado sobre arreglos multidimensionales con ejemplos.

  4. Devuelve una matriz de longitud cero, no nula : el autor de Programación efectiva, Joshua Bloch, habla sobre cómo devolver mejor matrices vacías

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