apuntes:arrays
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
apuntes:arrays [2019/02/14 22:12] – Santiago Faci | apuntes:arrays [2022/10/09 16:45] (current) – [Bucle for mejorado] Santiago Faci | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Los arrays ====== | ====== Los arrays ====== | ||
- | \part*{Los | + | ===== Arrays |
- | \section{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. |
- | + | ||
- | 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. | Dentro del array, cada valor ocupa una posición y se puede recuperar o modificar su valor combinando el identificador y dicha posición. | ||
- | \begin{figure}[h!] | + | <figure> |
- | | + | {{ array.png |
- | \includegraphics[scale=0.7]{partes/ | + | <caption>Array (fuente: |
- | \caption{Array (Fuente: geeksforgeeks.org)} | + | |
- | \label{Plataforma Java} | + | |
- | \end{figure} | + | |
- | Como se puede observar en la figura, la primera posición del array es la posición 0. Como consecuencia, | + | Como se puede observar en la figura, la primera posición del array es la posición 0. Como consecuencia, |
- | igual a la longitud del mismo menos uno. | + | |
- | \section{Declaración del array} | + | ==== Declaración del array ==== |
- | El array se declara como una variable, indicando tipo e identificador, | + | El array se declara como una variable, indicando tipo e identificador, |
- | puesto que son los caracteres que se emplean para referirse a alguna posición del mismo. | + | |
- | 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 | + | 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 |
- | 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 | + | 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 |
- | han reservado se puede acceder al array e indicar la posición para la que se quiere asignar | + | |
- | \begin{lstlisting}[language=java] | + | < |
String[] telefonos = new String[5]; | String[] telefonos = new String[5]; | ||
telefonos[0] = " | telefonos[0] = " | ||
- | . . . | + | </ |
- | \end{lstlisting} | + | |
- | También es posible inicializar los valores de un array aprovechando una estructura de bucle como \verb for de forma que se puede asignar a | + | También es posible inicializar los valores de un array aprovechando una estructura de bucle como '' |
- | cada elemento del mismo, posición por posición. | + | |
- | \begin{lstlisting}[language=java] | + | < |
String[] telefonos = new String[5]; | String[] telefonos = new String[5]; | ||
for (int i = 0; i < telefonos.length; | for (int i = 0; i < telefonos.length; | ||
telefonos[i] = " . . . "; | telefonos[i] = " . . . "; | ||
} | } | ||
- | \end{lstlisting} | + | </ |
- | 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 | + | 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. |
- | la capacidad justa para almacenar todos los valores especificados. | + | |
- | \begin{lstlisting}[language=java] | + | < |
String[] telefonos = {" | String[] telefonos = {" | ||
- | \end{lstlisting} | + | </ |
- | 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 | + | 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. |
- | 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. | + | |
- | \begin{lstlisting}[language=java] | + | < |
Moto[] misMotos = new Moto[10]; | Moto[] misMotos = new Moto[10]; | ||
- | . . . | + | </ |
- | \end{lstlisting} | + | |
- | En cualquier caso, un array es una referencia a la estructura donde se almacenan sus valores (o sus referencias, | + | En cualquier caso, un array es una referencia a la estructura donde se almacenan sus valores (o sus referencias, |
- | por lo que si se pasa como parámetro a un método, se pasará como referencia. | + | |
- | \begin{figure}[h!] | + | <figure> |
- | | + | {{ array1.jpg |
- | \includegraphics[scale=0.7]{partes/ | + | <caption>Array unidimensional (fuente: |
- | \caption{Array unidimensional (Fuente: geeksforgeeks.org)} | + | |
- | \label{Plataforma Java} | + | |
- | \end{figure} | + | |
- | \section{Utilización del array} | + | ==== 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 | + | 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. |
- | 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. | + | |
- | \begin{lstlisting}[language=java] | + | < |
Moto[] misMotos = new Moto[10]; | Moto[] misMotos = new Moto[10]; | ||
// Poblar el array . . . | // Poblar el array . . . | ||
Line 83: | Line 63: | ||
misMotos[i].pasarRevision(); | misMotos[i].pasarRevision(); | ||
} | } | ||
- | \end{lstlisting} | + | </ |
- | 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 | + | 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. |
- | objeto. | + | |
- | \begin{lstlisting}[language=java] | + | < |
Moto[] misMotos = new Moto[10]; | Moto[] misMotos = new Moto[10]; | ||
// Poblar el array . . . | // Poblar el array . . . | ||
Line 98: | Line 77: | ||
} | } | ||
} | } | ||
- | \end{lstlisting} | + | </ |
Los arrays se pueden pasar como parámetro a un método, y lo harán por referencia: | Los arrays se pueden pasar como parámetro a un método, y lo harán por referencia: | ||
- | \begin{lstlisting}[language=java] | + | < |
- | . . . | + | |
int[] numeros = new int[5]; | int[] numeros = new int[5]; | ||
for (int i = 0; i < numeros.length; | for (int i = 0; i < numeros.length; | ||
Line 117: | Line 95: | ||
} | } | ||
} | } | ||
- | \end{lstlisting} | + | </ |
- | \section{Arrays bidimensionales} | + | ===== Arrays bidimensionales |
- | Los arrays bidimensionales, | + | Los arrays bidimensionales, |
- | unidimensional en el que hay almacenado otro array en cada elemento del primero. | + | |
- | \begin{figure}[h!] | + | <figure> |
- | | + | {{ array2.jpg |
- | \includegraphics[scale=0.7]{partes/ | + | <caption>Array bidimensional (fuente: |
- | \caption{Array bidimensional (Fuente: geeksforgeeks.org)} | + | |
- | \label{Plataforma Java} | + | |
- | \end{figure} | + | |
- | Se declaran e inicializan de la misma manera que los arrays unidimensionales, | + | Se declaran e inicializan de la misma manera que los arrays unidimensionales, |
- | interpretar como una matriz, la primera dimensión hará referencia a las filas, y la segunda a las columnas | + | |
- | \begin{lstlisting}[language=java] | + | < |
String[][] telefonos = new String[5][6]; | String[][] telefonos = new String[5][6]; | ||
telefonos[0][0] = " | telefonos[0][0] = " | ||
- | . . . | + | </ |
- | \end{lstlisting} | + | |
- | También es posible inicializar los valores de un array aprovechando una estructura de bucle como \verb for de forma que se puede asignar a | + | También es posible inicializar los valores de un array aprovechando una estructura de bucle como '' |
- | cada elemento del mismo, posición por posición. En este caso será necesario anidar dos bucles para acceder a las dos dimensiones del array. | + | |
- | \begin{lstlisting}[language=java] | + | < |
String[][] telefonos = new String[5][6]; | String[][] telefonos = new String[5][6]; | ||
for (int i = 0; i < telefonos.length; | for (int i = 0; i < telefonos.length; | ||
Line 150: | Line 121: | ||
} | } | ||
} | } | ||
- | \end{lstlisting} | + | </ |
- | 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 | + | 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. |
- | la capacidad justa para almacenar todos los valores especificados. | + | |
- | \begin{lstlisting}[language=java] | + | < |
String[] telefonos = {{" | String[] telefonos = {{" | ||
- | \end{lstlisting} | + | </ |
Y, por supuesto, también podemos crear arrays bidimensionales de objetos: | Y, por supuesto, también podemos crear arrays bidimensionales de objetos: | ||
- | \begin{lstlisting}[language=java] | + | < |
Moto[][] misMotos = new Moto[10][2]; | Moto[][] misMotos = new Moto[10][2]; | ||
- | . . . | + | </ |
- | \end{lstlisting} | + | |
- | \section{Manipulaciones habituales con arrays} | + | ===== Manipulaciones habituales con arrays |
En Java disponemos de la clase \verb Arrays | En Java disponemos de la clase \verb Arrays | ||
- | \begin{itemize} | + | * '' |
- | \item \verb Arrays.binarySearch() | + | |
- | | + | |
- | \begin{lstlisting}[language=java] | + | < |
- | int[] numeros = new int[10]; | + | int[] numeros = new int[10]; |
- | for (int i = 0; i < numeros.length; | + | for (int i = 0; i < numeros.length; |
- | numeros[i] = i * 10; | + | numeros[i] = i * 10; |
- | } | + | } |
- | int resultado = Arrays.binarySearch(numeros, | + | int resultado = Arrays.binarySearch(numeros, |
- | System.out.println(resultado); | + | System.out.println(resultado); |
- | | + | </ |
- | \item \verb Arrays.copyOf() | + | * '' |
- | | + | |
| | ||
- | \begin{lstlisting}[language=java] | + | < |
- | int[] numeros = new int[5]; | + | int[] numeros = new int[5]; |
+ | |||
+ | int[] masNumeros = Arrays.copyOf(numeros, | ||
+ | System.out.println(masNumeros.length); | ||
+ | </ | ||
+ | |||
+ | * '' | ||
| | ||
- | | + | <code java> |
- | | + | int[] numeros |
- | \end{lstlisting} | + | int[] otrosNumeros = {1, 3, 4}; |
| | ||
- | \item \verb Arrays.equals() | + | System.out.println(Arrrays.equals(numeros, otrosNumeros)); // true |
+ | </ | ||
+ | |||
+ | * '' | ||
| | ||
- | \begin{lstlisting}[language=java] | + | < |
- | int[] numeros = {1, 3, 4}; | + | int[] numeros = new int[3]; |
- | int[] otrosNumeros = {1, 3, 4}; | + | |
- | + | ||
- | System.out.println(Arrrays.equals(numeros, | + | |
- | \end{lstlisting} | + | |
- | + | ||
- | \item \verb Arrays.fill() | + | |
- | + | ||
- | \begin{lstlisting}[language=java] | + | |
- | | + | |
- | + | ||
- | Arrays.fill(numeros, | + | |
- | System.out.println(Arrays.toString(numeros)); | + | |
- | \end{lstlisting} | + | |
- | \item \verb Arrays.sort() | + | Arrays.fill(numeros, 5); |
+ | System.out.println(Arrays.toString(numeros)); | ||
+ | </ | ||
- | \begin{lstlisting}[language=java] | + | * '' |
- | int[] numeros = {4, 10, 3, 6} | + | |
- | | + | |
- | System.out.println(Arrays.toString(numeros)); | + | |
- | \end{lstlisting} | + | |
- | \item \verb Arrays.toString() | + | <code java> |
+ | int[] numeros = {4, 10, 3, 6} | ||
+ | Arrays.sort(numeros); | ||
+ | System.out.println(Arrays.toString(numeros)); // [3, 4, 6, 10] | ||
+ | </ | ||
- | \begin{lstlisting}[language=java] | + | * '' |
- | int[] numeros = {10, 20, 30, 5} | + | |
- | System.out.println(Arrays.toString(numeros)); // [10, 20, 30, 5] | + | |
- | \end{lstlisting} | + | |
- | \end{itemize} | + | <code java> |
+ | int[] numeros = {10, 20, 30, 5} | ||
+ | System.out.println(Arrays.toString(numeros)); | ||
+ | </ | ||
- | \section{Bucle for mejorado} | + | ===== Bucle for mejorado |
- | En Java, existe lo que se conoce como bucle \emph{for each}. Es un tipo de bucle mejorado para el caso en que se quiera recorrer un array y | + | En Java, existe lo que se conoce como bucle //for-each//. Es un tipo de bucle mejorado para el caso en que se quiera recorrer un array y acceder a cada uno de los elementos del mismo. Por eso, no es necesario utilizar variable auxiliar para el índice ni asignar cada elemento del array para trabajar sobre él, lo hará automáticamente la propia estructura del bucle: |
- | acceder a cada uno de los elementos del mismo. Por eso, no es necesario utilizar variable auxiliar para el índice ni asignar cada elemento | + | |
- | del array para trabajar sobre él, lo hará automáticamente la propia estructura del bucle: | + | |
- | \begin{lstlisting}[language=java] | + | < |
Moto[] motos = new Moto[10]; | Moto[] motos = new Moto[10]; | ||
. . . | . . . | ||
Line 241: | Line 203: | ||
moto.viajar(" | moto.viajar(" | ||
} | } | ||
- | \end{lstlisting} | + | </ |
- | Y además, en el caso de que exista alguna excepción, siempre puede romperse el bucle (con \verb break ) o saltarse alguna iteración (con | + | Y además, en el caso de que exista alguna excepción, siempre puede romperse el bucle (con '' |
- | \verb continue | + | |
- | \begin{lstlisting}[language=java] | + | < |
Moto[] motos = new Moto[10]; | Moto[] motos = new Moto[10]; | ||
. . . | . . . | ||
Line 259: | Line 220: | ||
. . . | . . . | ||
} | } | ||
- | \end{lstlisting} | + | </ |
---- | ---- | ||
- | (c) 2019 Santiago Faci | + | |
+ | (c) 2019-{{date> |
apuntes/arrays.1550182329.txt.gz · Last modified: 2019/02/14 22:12 by Santiago Faci