Vous êtes sur la page 1sur 52

Arreglos

Programaci on I - UNGS

Arreglos
Un arreglo es una colecci on de valores donde:

2 of 15

Arreglos
Un arreglo es una colecci on de valores donde: Cada valor est a identicado por un ndice,

2 of 15

Arreglos
Un arreglo es una colecci on de valores donde: Cada valor est a identicado por un ndice, Todos los valores son del mismo tipo,

2 of 15

Arreglos
Un arreglo es una colecci on de valores donde: Cada valor est a identicado por un ndice, Todos los valores son del mismo tipo, El largo de la colecci on es jo.

2 of 15

Arreglos
Un arreglo es una colecci on de valores donde: Cada valor est a identicado por un ndice, Todos los valores son del mismo tipo, El largo de la colecci on es jo. Los arreglos son objetos.

2 of 15

Declaraci on
Se pueden denir arreglos de cualquier tipo.

3 of 15

Declaraci on
Se pueden denir arreglos de cualquier tipo. El tipo de un arreglo se escribe como el tipo de los valores que

contiene, seguido de corchetes ([ ]).

3 of 15

Declaraci on
Se pueden denir arreglos de cualquier tipo. El tipo de un arreglo se escribe como el tipo de los valores que

contiene, seguido de corchetes ([ ]).


Por ejemplo, el tipo de un arreglo de enteros es int[ ] y un arreglo

de doubles es de tipo double[ ]:


1 2

int[ ] cuenta; double[ ] decimales;

3 of 15

Declaraci on
Se pueden denir arreglos de cualquier tipo. El tipo de un arreglo se escribe como el tipo de los valores que

contiene, seguido de corchetes ([ ]).


Por ejemplo, el tipo de un arreglo de enteros es int[ ] y un arreglo

de doubles es de tipo double[ ]:


1 2

int[ ] cuenta; double[ ] decimales;

Cu anto vale un arreglo que no fue inicializado?

3 of 15

Declaraci on
Se pueden denir arreglos de cualquier tipo. El tipo de un arreglo se escribe como el tipo de los valores que

contiene, seguido de corchetes ([ ]).


Por ejemplo, el tipo de un arreglo de enteros es int[ ] y un arreglo

de doubles es de tipo double[ ]:


1 2

int[ ] cuenta; double[ ] decimales;

Cu anto vale un arreglo que no fue inicializado? Las variables de tipo arreglo valen null hasta no ser inicializadas

(como cualquier otra variable de tipo objeto).

3 of 15

Creaci on
Para crear un objeto del tipo arreglo, usamos la palabra new en una expresi on de la forma new tipo[largo].

4 of 15

Creaci on
Para crear un objeto del tipo arreglo, usamos la palabra new en una expresi on de la forma new tipo[largo]. Por ejemplo:
1 2

cuenta = new int[4]; decimales = new double[largo];

4 of 15

Creaci on
Para crear un objeto del tipo arreglo, usamos la palabra new en una expresi on de la forma new tipo[largo]. Por ejemplo:
1 2

cuenta = new int[4]; decimales = new double[largo];

cuenta referenciar a a un arreglo de cuatro enteros y decimales a

un arreglo de doubles del tama no que indique largo al momento de ejecutarse la sentencia.

4 of 15

Creaci on
Para crear un objeto del tipo arreglo, usamos la palabra new en una expresi on de la forma new tipo[largo]. Por ejemplo:
1 2

cuenta = new int[4]; decimales = new double[largo];

cuenta referenciar a a un arreglo de cuatro enteros y decimales a

un arreglo de doubles del tama no que indique largo al momento de ejecutarse la sentencia. Los elementos se inicializan con el valor por defecto del tipo correspondiente (0 para los n umeros, false para boolean, null para objetos)

4 of 15

Acceder a los elementos


Para acceder a un elemento del arreglo se debe escribir el nombre

de la variable que referencia al arreglo seguido del ndice entre corchetes ([i]).

5 of 15

Acceder a los elementos


Para acceder a un elemento del arreglo se debe escribir el nombre

de la variable que referencia al arreglo seguido del ndice entre corchetes ([i]). Por ejemplo, cuenta[0] es el primer elemento del arreglo, cuenta[1] el segundo y cuenta[i] es el elemento en la posici on i.

5 of 15

Acceder a los elementos


Para acceder a un elemento del arreglo se debe escribir el nombre

de la variable que referencia al arreglo seguido del ndice entre corchetes ([i]). Por ejemplo, cuenta[0] es el primer elemento del arreglo, cuenta[1] el segundo y cuenta[i] es el elemento en la posici on i. Los elementos de un arreglo pueden ser utilizados como cualquier otra variable:
1 2 3 4

cuenta[0] = 7; cuenta[1] = cuenta[0] * 2; cuenta[2]++; cuenta[3] = 60;

5 of 15

Acceder a los elementos


Para acceder a un elemento del arreglo se debe escribir el nombre

de la variable que referencia al arreglo seguido del ndice entre corchetes ([i]). Por ejemplo, cuenta[0] es el primer elemento del arreglo, cuenta[1] el segundo y cuenta[i] es el elemento en la posici on i. Los elementos de un arreglo pueden ser utilizados como cualquier otra variable:
1 2 3 4

cuenta[0] = 7; cuenta[1] = cuenta[0] * 2; cuenta[2]++; cuenta[3] = 60;

El resultado despu es de ejecutar el c odigo anterior es el siguiente:

5 of 15

Copiar arreglos
Qu e efecto tendr a el siguiente c odigo?
1 2

double[ ] a = new double[3]; double[ ] b = a;

6 of 15

Copiar arreglos
Qu e efecto tendr a el siguiente c odigo?
1 2

double[ ] a = new double[3]; double[ ] b = a;

Como con cualquier objeto, las variables contienen s olo referencias

al arreglo, de modo que s olo se copiar a una referencia:


a 0.0 b
0

0.0
1

0.0
2

6 of 15

Copiar arreglos
Qu e efecto tendr a el siguiente c odigo?
1 2

double[ ] a = new double[3]; double[ ] b = a;

Como con cualquier objeto, las variables contienen s olo referencias

al arreglo, de modo que s olo se copiar a una referencia:


a 0.0 b
0

0.0
1

0.0
2

a y b ahora son dos nombres para el mismo objeto: es decir, hacen

aliasing.

6 of 15

Copiar arreglos
Para copiar un arreglo no tenemos otro remedio que crear uno

nuevo y copiar elemento a elemento.

7 of 15

Copiar arreglos
Para copiar un arreglo no tenemos otro remedio que crear uno

nuevo y copiar elemento a elemento. Podemos utilizar la variable de instancia length que contiene el largo del arreglo:
1 2 3 4 5

double[ ] b = new double[a.length]; for(int i=0; i<a.length; i++) { b[i] = a[i]; }

7 of 15

Copiar arreglos
Para copiar un arreglo no tenemos otro remedio que crear uno

nuevo y copiar elemento a elemento. Podemos utilizar la variable de instancia length que contiene el largo del arreglo:
1 2 3 4 5

double[ ] b = new double[a.length]; for(int i=0; i<a.length; i++) { b[i] = a[i]; }

Tambi en podemos usar el m etodo de instancia clone() de los

arreglos que hace esto mismo por nosotros:


1

double[ ] b = a.clone();
7 of 15

Consideraciones de eciencia
El concepto de secuencia es algo muy cotidiano.

8 of 15

Consideraciones de eciencia
El concepto de secuencia es algo muy cotidiano. Ejemplos:

8 of 15

Consideraciones de eciencia
El concepto de secuencia es algo muy cotidiano. Ejemplos: Lista de compras del supermercado (productos).

8 of 15

Consideraciones de eciencia
El concepto de secuencia es algo muy cotidiano. Ejemplos: Lista de compras del supermercado (productos). Cartelera del cine (pel culas).

8 of 15

Consideraciones de eciencia
El concepto de secuencia es algo muy cotidiano. Ejemplos: Lista de compras del supermercado (productos). Cartelera del cine (pel culas). Lista de invitados a un evento (personas).

8 of 15

Consideraciones de eciencia
El concepto de secuencia es algo muy cotidiano. Ejemplos: Lista de compras del supermercado (productos). Cartelera del cine (pel culas). Lista de invitados a un evento (personas). etc.

8 of 15

Consideraciones de eciencia
El concepto de secuencia es algo muy cotidiano. Ejemplos: Lista de compras del supermercado (productos). Cartelera del cine (pel culas). Lista de invitados a un evento (personas). etc. Cuando tenemos que representar el concepto de secuencia en una

computadora, tenemos varias alternativas.

8 of 15

Consideraciones de eciencia
El concepto de secuencia es algo muy cotidiano. Ejemplos: Lista de compras del supermercado (productos). Cartelera del cine (pel culas). Lista de invitados a un evento (personas). etc. Cuando tenemos que representar el concepto de secuencia en una

computadora, tenemos varias alternativas.


Lo que distingue a los arreglos de otras variantes (que veremos

m as adelante) es la eciencia de sus operaciones.

8 of 15

Operaciones: B usqueda por ndice


Para buscar un elemento dado el ndice del mismo, disponemos del

operador [ ].

9 of 15

Operaciones: B usqueda por ndice


Para buscar un elemento dado el ndice del mismo, disponemos del

operador [ ].
Los elementos se guardan en memoria en forma consecutiva.

9 of 15

Operaciones: B usqueda por ndice


Para buscar un elemento dado el ndice del mismo, disponemos del

operador [ ].
Los elementos se guardan en memoria en forma consecutiva. Si cada elemento ocupa s bytes, encontrar el elemento en la

posici on i se resuelve yendo a buscarlo a la posici on i s despu es del inicio:


0 1
i

s i*s

9 of 15

Operaciones: B usqueda por ndice


Para buscar un elemento dado el ndice del mismo, disponemos del

operador [ ].
Los elementos se guardan en memoria en forma consecutiva. Si cada elemento ocupa s bytes, encontrar el elemento en la

posici on i se resuelve yendo a buscarlo a la posici on i s despu es del inicio:


0 1
i

s i*s

Con lo cual, resolver esta operaci on tiene un tiempo de ejecuci on

constante, independientemente del tama no del arreglo.


9 of 15

Operaciones: B usqueda por valor


Si, en cambio, quisi eramos buscar la posici on en la que se

encuentra un valor (si est a), no tenemos otro remedio que recorrer el arreglo entero.

10 of 15

Operaciones: B usqueda por valor


Si, en cambio, quisi eramos buscar la posici on en la que se

encuentra un valor (si est a), no tenemos otro remedio que recorrer el arreglo entero.
Por ejemplo, esta ser a una implementaci on posible:
1 2 3 4 5 6 7 8

static int buscarValor(int[ ] arreglo, int val) { for(int i = 0; i < arreglo.length; i++) { if(arreglo[i] == val) { return i; //Devuelve la posici on } } return 1; //Devuelve 1 si no se encontr o }

10 of 15

Operaciones: B usqueda por valor


El tiempo de ejecuci on de esta funci on se dice que es lineal porque

toma un tiempo proporcional a la cantidad de elementos del arreglo.

11 of 15

Operaciones: B usqueda por valor


El tiempo de ejecuci on de esta funci on se dice que es lineal porque

toma un tiempo proporcional a la cantidad de elementos del arreglo.


N otese que puede haber m as de un elemento con el mismo valor.

Esta funci on s olo devuelve el ndice a la primera aparici on.

11 of 15

Operaciones: Inserci on
Agregar un elemento nuevo a un arreglo, es imposible. La cantidad

de elementos de un arreglo es ja.

12 of 15

Operaciones: Inserci on
Agregar un elemento nuevo a un arreglo, es imposible. La cantidad

de elementos de un arreglo es ja.


La u nica alternativa que tenemos es crear un nuevo arreglo de

tama no mayor al anterior, copiar todos los elementos y nalmente copiar el valor que queremos agregar.

12 of 15

Operaciones: Inserci on
Agregar un elemento nuevo a un arreglo, es imposible. La cantidad

de elementos de un arreglo es ja.


La u nica alternativa que tenemos es crear un nuevo arreglo de

tama no mayor al anterior, copiar todos los elementos y nalmente copiar el valor que queremos agregar.
Nuevamente, si hici eramos esto u ltimo, el tiempo de ejecuci on de

esta operaci on ser a lineal.

12 of 15

Operaciones: Eliminaci on
Algo similar ocurre con el borrado de elementos: la cantidad es

siempre la misma.

13 of 15

Operaciones: Eliminaci on
Algo similar ocurre con el borrado de elementos: la cantidad es

siempre la misma.
Podemos de manera an aloga crear un arreglo nuevo en que

contenga todos los mismos elementos, menos el que queremos eliminar.

13 of 15

Operaciones: Eliminaci on
Algo similar ocurre con el borrado de elementos: la cantidad es

siempre la misma.
Podemos de manera an aloga crear un arreglo nuevo en que

contenga todos los mismos elementos, menos el que queremos eliminar.


Otra vez, el tiempo de ejecuci on de esta operaci on ser a lineal.

13 of 15

Conclusi on
Los arreglos son una estructura de datos para almacenar una

secuencia ordenada de elementos del mismo tipo.

14 of 15

Conclusi on
Los arreglos son una estructura de datos para almacenar una

secuencia ordenada de elementos del mismo tipo.


La cantidad de los elementos que almacena un arreglo se ja en su

creaci on y esta cantidad no se puede modicar.

14 of 15

Conclusi on
Los arreglos son una estructura de datos para almacenar una

secuencia ordenada de elementos del mismo tipo.


La cantidad de los elementos que almacena un arreglo se ja en su

creaci on y esta cantidad no se puede modicar.


Acceder a un elemento dada la posici on es una operaci on inmediata

(tiempo constante ya que no depende del tama no del arreglo).

14 of 15

Conclusi on
Los arreglos son una estructura de datos para almacenar una

secuencia ordenada de elementos del mismo tipo.


La cantidad de los elementos que almacena un arreglo se ja en su

creaci on y esta cantidad no se puede modicar.


Acceder a un elemento dada la posici on es una operaci on inmediata

(tiempo constante ya que no depende del tama no del arreglo).


Aunque otras operaciones pueden requerir tiempos m as grandes

(en general en funci on del tama no del arreglo).

14 of 15

Preguntas?

Preguntas?

15 of 15