apuntes:arrays
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
apuntes:arrays [2019/02/10 20:53] – created Santiago Faci | apuntes:arrays [2022/10/09 16:45] (current) – [Bucle for mejorado] Santiago Faci | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Los arrays ====== | ====== Los arrays ====== | ||
+ | |||
+ | ===== Arrays unidimensionales ===== | ||
+ | |||
+ | Un array es una estructura de datos que permite almacenar un número indeterminado de variables del mismo tipo, que son referenciadas por el mismo identificador. | ||
+ | |||
+ | Dentro del array, cada valor ocupa una posición y se puede recuperar o modificar su valor combinando el identificador y dicha posición. | ||
+ | |||
+ | < | ||
+ | {{ array.png }} | ||
+ | < | ||
+ | |||
+ | Como se puede observar en la figura, la primera posición del array es la posición 0. Como consecuencia, | ||
+ | |||
+ | ==== Declaración del array ==== | ||
+ | |||
+ | El array se declara como una variable, indicando tipo e identificador, | ||
+ | |||
+ | Una vez declarado puede ser instanciado con la instrucción \verb new seguido del tipo e indicando el número de elementos para los que se quiere reservar espacio en memoria, tal y como se indica a | ||
+ | continuación. En este caso, para asignar valor a cada uno de los espacios que se han reservado se puede acceder al array e indicar la posición para la que se quiere asignar | ||
+ | |||
+ | <code java> | ||
+ | String[] telefonos = new String[5]; | ||
+ | telefonos[0] = " | ||
+ | </ | ||
+ | |||
+ | También es posible inicializar los valores de un array aprovechando una estructura de bucle como '' | ||
+ | |||
+ | <code java> | ||
+ | String[] telefonos = new String[5]; | ||
+ | for (int i = 0; i < telefonos.length; | ||
+ | telefonos[i] = " . . . "; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | También es posible crear un array asignando directamente los valores que queremos que contenga el mismo. En ese caso se declara un array con la capacidad justa para almacenar todos los valores especificados. | ||
+ | |||
+ | <code java> | ||
+ | String[] telefonos = {" | ||
+ | </ | ||
+ | |||
+ | Hay que tener en cuenta que pueden crear arrays de tipos primitivos y clases Java, y también de cualquier clase de las que hayas programado en el proyecto. En ese caso, se crea una estructura que almacena las referencias a todos los objetos que se creen en cada una de ellas. | ||
+ | |||
+ | <code java> | ||
+ | Moto[] misMotos = new Moto[10]; | ||
+ | </ | ||
+ | |||
+ | En cualquier caso, un array es una referencia a la estructura donde se almacenan sus valores (o sus referencias, | ||
+ | |||
+ | < | ||
+ | {{ array1.jpg }} | ||
+ | < | ||
+ | |||
+ | ==== Utilización del array ==== | ||
+ | |||
+ | La utilización del array es muy sencilla. Cada elemento del mismo, una vez indicada la posición, se puede tratar como una variable del mismo tipo que el array, por lo que las operaciones que se pueden hacer con cada elemento son las mismas que se pueden hacer sobre variables individuales. | ||
+ | |||
+ | <code java> | ||
+ | Moto[] misMotos = new Moto[10]; | ||
+ | // Poblar el array . . . | ||
+ | . . . | ||
+ | for (int i = 0; i < misMotos.length; | ||
+ | misMotos[i].pasarRevision(); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | También se puede declarar una variable para tomar la referencia del emento del array. A veces es más cómodo para acceder a los métodos del objeto. | ||
+ | |||
+ | <code java> | ||
+ | Moto[] misMotos = new Moto[10]; | ||
+ | // Poblar el array . . . | ||
+ | . . . | ||
+ | for (int i = 0; i < misMotos.length; | ||
+ | Moto moto = misMotos[i]; | ||
+ | if (!moto.estaRevisada()) { | ||
+ | moto.pasarRevision(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Los arrays se pueden pasar como parámetro a un método, y lo harán por referencia: | ||
+ | |||
+ | <code java> | ||
+ | int[] numeros = new int[5]; | ||
+ | for (int i = 0; i < numeros.length; | ||
+ | numeros[i] = 10; | ||
+ | } | ||
+ | incrementar(numeros); | ||
+ | System.out.println(numeros[3]); | ||
+ | . . . | ||
+ | . . . | ||
+ | public void incrementar(int[] valores) { | ||
+ | for (int i = 0; i < valores.length; | ||
+ | valores[i]++; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Arrays bidimensionales ===== | ||
+ | |||
+ | Los arrays bidimensionales, | ||
+ | |||
+ | < | ||
+ | {{ array2.jpg }} | ||
+ | < | ||
+ | |||
+ | Se declaran e inicializan de la misma manera que los arrays unidimensionales, | ||
+ | |||
+ | <code java> | ||
+ | String[][] telefonos = new String[5][6]; | ||
+ | telefonos[0][0] = " | ||
+ | </ | ||
+ | |||
+ | También es posible inicializar los valores de un array aprovechando una estructura de bucle como '' | ||
+ | |||
+ | <code java> | ||
+ | String[][] telefonos = new String[5][6]; | ||
+ | for (int i = 0; i < telefonos.length; | ||
+ | for (int j = 0; j < telefonos[0].length; | ||
+ | telefonos[i][j] = " . . . "; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | También es posible crear un array bidimensional asignando directamente los valores que queremos que contenga el mismo. En ese caso se declara un array con la capacidad justa para almacenar todos los valores especificados. | ||
+ | |||
+ | <code java> | ||
+ | String[] telefonos = {{" | ||
+ | </ | ||
+ | |||
+ | Y, por supuesto, también podemos crear arrays bidimensionales de objetos: | ||
+ | |||
+ | <code java> | ||
+ | Moto[][] misMotos = new Moto[10][2]; | ||
+ | </ | ||
+ | |||
+ | ===== Manipulaciones habituales con arrays ===== | ||
+ | |||
+ | En Java disponemos de la clase \verb Arrays | ||
+ | |||
+ | * '' | ||
+ | |||
+ | <code java> | ||
+ | int[] numeros = new int[10]; | ||
+ | for (int i = 0; i < numeros.length; | ||
+ | numeros[i] = i * 10; | ||
+ | } | ||
+ | int resultado = Arrays.binarySearch(numeros, | ||
+ | System.out.println(resultado); | ||
+ | </ | ||
+ | |||
+ | * '' | ||
+ | | ||
+ | <code java> | ||
+ | int[] numeros = new int[5]; | ||
+ | | ||
+ | int[] masNumeros = Arrays.copyOf(numeros, | ||
+ | System.out.println(masNumeros.length); | ||
+ | </ | ||
+ | |||
+ | * '' | ||
+ | | ||
+ | <code java> | ||
+ | int[] numeros = {1, 3, 4}; | ||
+ | int[] otrosNumeros = {1, 3, 4}; | ||
+ | | ||
+ | System.out.println(Arrrays.equals(numeros, | ||
+ | </ | ||
+ | |||
+ | * '' | ||
+ | | ||
+ | <code java> | ||
+ | int[] numeros = new int[3]; | ||
+ | |||
+ | Arrays.fill(numeros, | ||
+ | System.out.println(Arrays.toString(numeros)); | ||
+ | </ | ||
+ | |||
+ | * '' | ||
+ | |||
+ | <code java> | ||
+ | int[] numeros = {4, 10, 3, 6} | ||
+ | Arrays.sort(numeros); | ||
+ | System.out.println(Arrays.toString(numeros)); | ||
+ | </ | ||
+ | |||
+ | * '' | ||
+ | |||
+ | <code java> | ||
+ | int[] numeros = {10, 20, 30, 5} | ||
+ | System.out.println(Arrays.toString(numeros)); | ||
+ | </ | ||
+ | |||
+ | ===== Bucle for mejorado ===== | ||
+ | |||
+ | En Java, existe lo que se conoce como bucle // | ||
+ | |||
+ | <code java> | ||
+ | Moto[] motos = new Moto[10]; | ||
+ | . . . | ||
+ | for (Moto moto : motos) { | ||
+ | // Se ejecuta este método para todos los elementos del array | ||
+ | moto.viajar(" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Y además, en el caso de que exista alguna excepción, siempre puede romperse el bucle (con '' | ||
+ | |||
+ | <code java> | ||
+ | Moto[] motos = new Moto[10]; | ||
+ | . . . | ||
+ | for (Moto moto : motos) { | ||
+ | // Si la moto no esta revisada pasamos a la siguiente | ||
+ | if (!moto.estaRevisada()) { | ||
+ | continue; | ||
+ | } | ||
+ | |||
+ | moto.viajar(" | ||
+ | moto. . . . | ||
+ | . . . | ||
+ | } | ||
+ | </ | ||
---- | ---- | ||
- | (c) 2019 Santiago Faci | + | |
+ | (c) 2019-{{date> |
apuntes/arrays.1549832005.txt.gz · Last modified: 2019/02/10 20:53 by Santiago Faci