0% encontró este documento útil (0 votos)
336 vistas

Arreglos Colecciones Java

El documento describe cómo usar arreglos y colecciones en Java para almacenar y procesar conjuntos de datos. Explica que los arreglos permiten almacenar valores en memoria para su posterior acceso, y presenta un ejemplo de cálculo de salarios promedio usando arreglos. Luego introduce las colecciones como alternativa a los arreglos, mencionando algunos tipos comunes como ArrayList, LinkedList, HashSet y TreeSet.

Cargado por

MiguelGutierrez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
336 vistas

Arreglos Colecciones Java

El documento describe cómo usar arreglos y colecciones en Java para almacenar y procesar conjuntos de datos. Explica que los arreglos permiten almacenar valores en memoria para su posterior acceso, y presenta un ejemplo de cálculo de salarios promedio usando arreglos. Luego introduce las colecciones como alternativa a los arreglos, mencionando algunos tipos comunes como ArrayList, LinkedList, HashSet y TreeSet.

Cargado por

MiguelGutierrez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 31

ARREGLOS Y COLECCIONES EN JAVA

ESTRUCTURA DE CONTENIDOS

1.

PARA QU USAR ARREGLOS?


1.1
1.2
1.3

2.

Enunciado del Problema.


Anlisis del Problema.
Solucin al problema con el uso de arreglos.

DECLARACIN, CREACIN Y USO DE ARREGLOS


2.1
2.2
2.3

3.

Sintaxis para declarar y crear un arreglo.


Recorrido de un arreglo.
Arreglos de Objetos.

COLECCIONES Y GENERICS
3.1
3.2
3.3
3.4
3.5
3.6

Tipos de Colecciones y Caractersticas.


Uso de la coleccin ArrayList.
Uso de la coleccin LinkedList.
Uso de la coleccin HashSet.
Uso de la coleccin TreeSet.
Los generics y las colecciones.

1
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

MAPA CONCEPTUAL

2
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

INTRODUCCIN

Frecuentemente las aplicaciones informticas requieren manejar conjuntos de datos


comunes en memoria para su posterior consulta o procesamiento, por ejemplo los
nombres de los empleados de una empresa o los precios de los artculos de un
almacn. Este almacenamiento de datos en memoria se puede llevar a cabo a
travs de estructuras de programacin como los arreglos o las colecciones.
El uso de arreglos y colecciones es fundamental para la solucin de problemas a
travs de aplicaciones de software y este es el principal propsito del presente
Objeto de Aprendizaje.

1. PARA QU USAR ARREGLOS?

Los arreglos son estructuras de almacenamiento en memoria que permiten llevar a


cabo la lectura, el procesamiento o consulta de conjuntos de datos dentro de una
aplicacin de software. Este recurso es de uso comn entre los desarrolladores de
software, pero para entender mejor su utilidad, a continuacin se presenta un
enunciado de un problema donde se requiere el uso de arreglos.

1.1 Enunciado del problema.

Determinar la cantidad de empleados de una empresa que


ganan un salario superior al salario promedio de todos los
empleados de la empresa.

3
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

1.2 Anlisis del problema.

Fcilmente se puede deducir que el problema se debe descomponer en 2 partes:

1
2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

Se debe determinar cuntos empleados


ganan un salario superior al salario promedio
anteriormente calculado.
Se requiere calcular el salario promedio de
los empleados de la empresa.

import javax.swing.JOptionPane;
public class Programa1
{
public static void main(String arg[])
{
//1. Calcular el salario promedio de los empleados
double sumSalario=0,salario,salarioPromedio;
int totalEmpleados, cantEmplSalSuperior=0;
totalEmpleados=Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese cantidad de empleados"));
for(int i=1;i<=totalEmpleados;i++)
{
salario=Double.parseDouble(JOptionPane.showInputDialog(null,"Ingrese salario del empleado"));
sumSalario=sumSalario+salario;
}
salarioPromedio=sumSalario/totalEmpleados;
//2. Determinar cuntos empleados ganan un salario superior al promedio
for(int i=1;i<=totalEmpleados;i++)
{
//????????????????
}
}
}

El programa anterior calcula correctamente el salario promedio de todos los


empleados de la empresa (punto 1 del anlisis), pero cmo determinar cuntos
de esos empleados ganan un salario superior al salario promedio?(punto 2 del
anlisis)

4
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

Primer Intento

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

Se debe determinar cuntos


empleados ganan un salario superior al
salario promedio anteriormente

import javax.swing.JOptionPane;
public class Programa1A
{
public static void main(String arg[])
{
//1. Calcular el salario promedio de los empleados
double sumSalario=0,salario=0,salarioPromedio;
int totalEmpleados, cantEmplSalSuperior=0;
totalEmpleados=Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese cantidad de empleados"));
for(int i=1;i<=totalEmpleados;i++)
{
salario=Double.parseDouble(JOptionPane.showInputDialog(null,"Ingrese salario del empleado"));
sumSalario=sumSalario+salario;
}
salarioPromedio=sumSalario/totalEmpleados;

//2. Determinar cuntos empleados ganan un salario superior al promedio


for(int i=1;i<=totalEmpleados;i++)
{
if(salario > salarioPromedio)
{
cantEmplSalSuperior++;
}
}

La solucin propuesta es equivocada porque el salario de cada empleado es ledo


en la misma variable salario en la lnea 14 del programa, por lo tanto, en la lnea
22 del programa, el valor que se tiene en la variable salario es el salario del ltimo
empleado solamente, los salarios de los empleados anteriores se han perdido.
Una pequea prueba de escritorio muestra como el valor de la variable salario es
actualizado cada vez que se lee un nuevo salario.

Salario

1
2
3
4
5
6

1200000
1500000
950000
800000
1100000
7800000

5
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

Segundo Intento

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

Se requiere calcular el salario promedio


de los empleados de la empresa.

import javax.swing.JOptionPane;
public class Programa1B
{
public static void main(String arg[])
{
//1. Calcular el salario promedio de los empleados
double sumSalario=0,salario,salarioPromedio;
int totalEmpleados, cantEmplSalSuperior=0;
totalEmpleados=Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese cantidad de empleados"));
for(int i=1;i<=totalEmpleados;i++)
{
salario=Double.parseDouble(JOptionPane.showInputDialog(null,"Ingrese salario del empleado"));
sumSalario=sumSalario+salario;
}
salarioPromedio=sumSalario/totalEmpleados;
//2. Determinar cuntos empleados ganan un salario superior al promedio
for(int i=1;i<=totalEmpleados;i++)
{
salario=Double.parseDouble(JOptionPane.showInputDialog(null,"Ingrese salario del empleado"));
if(salario > salarioPromedio)
{
cantEmplSalSuperior++;
}
}

}
}

La segunda solucin propuesta incluye en la lnea 22 un nuevo cdigo que permite


leer nuevamente el salario de cada empleado. Esta propuesta es equivocada porque
el salario de cada empleado ya haba sido ledo en la lnea 14 del programa. Esta
solucin adems del doble trabajo que signica leer en 2 oportunidades el salario de
cada empleado, es insegura, ya que al volver a leer el salario de cada empleado, el
usuario podra ingresar salarios diferentes a los usados para calcular el salario
promedio.

5
6
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

1.3 SOLUCIN AL PROBLEMA CON EL USO DE ARREGLOS.

La segunda solucin propuesta incluye en la lnea 22 un nuevo cdigo que permite


leer nuevamente el salario de cada empleado. Esta propuesta es equivocada
porque el salario de cada empleado ya haba sido ledo en la lnea 14 del programa.
Esta solucin adems del doble trabajo que signica leer en 2 oportunidades el
salario de cada empleado, es insegura, ya que al volver a leer el salario de cada
empleado, el usuario podra ingresar salarios diferentes a los usados para calcular el
salario promedio.

1
2
3
4
5
6

Salario

1200000
1500000
950000
800000
1100000
7800000

SalarioPromedio cantEmplSalSup

1055000

Los arreglos permiten realizar el almacenamiento de un conjunto de valores en


posiciones de memoria diferentes para que cada valor pueda ser accedido en
cualquier momento durante la ejecucin de un programa.

La solucin al problema consiste en denir un arreglo para


almacenar los diferentes salarios de los empleados de la empresa, a
partir de ellos calcular el salario promedio y posteriormente acceder
al arreglo de salarios para determinar cuntos de ellos son
superiores al salario promedio.

7
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

SOLUCIN FINAL USANDO UN ARREGLO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

import javax.swing.JOptionPane;
public class Programa1Final
{
public static void main(String arg[])
{
//1. Calcular el salario promedio de los empleados
double salario[];//Declaracin del arreglo de Salarios
double sumSalario=0,salarioPromedio;
int totalEmpleados, cantEmplSalSuperior=0;
totalEmpleados=Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese cantidad de empleados"));
salario= new double[totalEmpleados];//Creacin del arreglo de Salarios
for(int i=0;i<totalEmpleados;i++)
{
//Lectura de cada posicin (i) del arreglo (en cada posicin se almacena un salario diferente
salario[i]=Double.parseDouble(JOptionPane.showInputDialog(null,"Ingrese salario del empleado"));
sumSalario=sumSalario+salario[i];
}
salarioPromedio=sumSalario/totalEmpleados;
JOptionPane.showMessageDialog(null, "El salario promedio es "+salarioPromedio);
//2. Determinar cuntos empleados ganan un salario superior al promedio
for(int i=0;i<totalEmpleados;i++)
{
//Uso del arreglo de salarios, previamente cargado en la lnea 18
if(salario[i] > salarioPromedio)
{
cantEmplSalSuperior++;
}
}
JOptionPane.showMessageDialog(null, "El numero de empleados con salario superior al promedio
es "+cantEmplSalSuperior);
}
}

5
8
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

Ejecucin del programa:

Ingrese cantidad de empleados

6
Aceptar

Ingrese Salario de empleados

1200000
Aceptar

Ingrese Salario de empleados

1500000
Aceptar

Ingrese Salario de empleados

950000
Aceptar

Ingrese Salario de empleados

800000
Aceptar

Ingrese Salario de empleados

1100000
Aceptar

El salario promedio es 1055000.0


Aceptar

Ingrese Salario de empleados

780000
Aceptar

El numero de empleados con salarios


superior al promedio es 3
Aceptar

9
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

2. DECLARACIN, CREACIN Y USO DE ARREGLOS


2.1 Sintaxis para declarar y crear un arreglo.

La declaracin de un arreglo es similar a la declaracin de una variable, la sintaxis


es la siguiente:

tipoDato nombreArreglo[ ];
Ejemplos:
int edad[ ];
Declaracin de un arreglo de enteros llamado edad
oat nota[ ];
Declaracin de un arreglo de reales llamado nota
String nombre[ ]; Declaracin de un arreglo de cadenas llamado nombre

En el ejercicio anteriormente resuelto, se aprecia la declaracin de un arreglo de


tipo doubl llamado salario:

10
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

import javax.swing.JOptionPane;
public class Programa1Final
{
public static void main(String arg[])
{
//1. Calcular el salario promedio de los empleados
double salario[];//Declaracin del arreglo de Salarios
double sumSalario=0,salarioPromedio;
int totalEmpleados, cantEmplSalSuperior=0;
totalEmpleados=Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese cantidad de empleados"));
salario= new double[totalEmpleados];//Creacin del arreglo de Salarios
for(int i=0;i<totalEmpleados;i++)
{
//Lectura de cada posicin (i) del arreglo (en cada posicin se almacena un salario diferente
salario[i]=Double.parseDouble(JOptionPane.showInputDialog(null,"Ingrese salario del empleado"));
sumSalario=sumSalario+salario[i];
}
salarioPromedio=sumSalario/totalEmpleados;
JOptionPane.showMessageDialog(null, "El salario promedio es "+salarioPromedio);
//2. Determinar cuntos empleados ganan un salario superior al promedio
for(int i=0;i<totalEmpleados;i++)
{
//Uso del arreglo de salarios, previamente cargado en la lnea 18
if(salario[i] > salarioPromedio)
{
cantEmplSalSuperior++;
}
}
JOptionPane.showMessageDialog(null, "El numero de empleados con salario superior al promedio
es "+cantEmplSalSuperior);
}
}

Despus de declarar un arreglo, este debe crearse, para ello se usa la palabra
reservada new y se dene la cantidad de posiciones que el arreglo puede
contener para el almacenamiento de valores.

Sintaxis:
Arreglo = new TipoDato[tamao];

11
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

Ejemplos:

edad = new int [10]; Creacin del arreglo edad con 10 posiciones
nota = new oat [15]; Creacin del arreglo nota con 15 posiciones
nombre = new String [5]; Creacin del arreglo nombre con 5 posiciones

En el ejercicio anteriormente resuelto, se aprecia la creacin de un arreglo


llamado salario de una cantidad de posiciones denida por la variable
totalEmpleados:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

import javax.swing.JOptionPane;
public class Programa1Final
{
public static void main(String arg[])
{
//1. Calcular el salario promedio de los empleados
double salario[];//Declaracin del arreglo de Salarios
double sumSalario=0,salarioPromedio;
int totalEmpleados, cantEmplSalSuperior=0;
totalEmpleados=Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese cantidad de empleados"));
salario= new double[totalEmpleados];//Creacin del arreglo de Salarios
for(int i=0;i<totalEmpleados;i++)
{
//Lectura de cada posicin (i) del arreglo (en cada posicin se almacena un salario diferente
salario[i]=Double.parseDouble(JOptionPane.showInputDialog(null,"Ingrese salario del empleado"));
sumSalario=sumSalario+salario[i];
}
salarioPromedio=sumSalario/totalEmpleados;
JOptionPane.showMessageDialog(null, "El salario promedio es "+salarioPromedio);
//2. Determinar cuntos empleados ganan un salario superior al promedio
for(int i=0;i<totalEmpleados;i++)
{
//Uso del arreglo de salarios, previamente cargado en la lnea 18
if(salario[i] > salarioPromedio)
{
cantEmplSalSuperior++;
}
}
JOptionPane.showMessageDialog(null, "El numero de empleados con salario superior al promedio
es "+cantEmplSalSuperior);
}
}

La primera posicin de un arreglo en Java es la posicin 0 y la ltima es n-1,


donde n es el tamao del arreglo.

12
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

En Java tambin es posible declarar y crear un objeto en la misma lnea de


cdigo, ejemplo:

int edad [ ] = new int [10];


Declaracin y creacin de un arreglo llamado edad de 10 posiciones de tipo
entero.

floatnota [ ] = new float [15];


Declaracin y creacin de un arreglo llamado nota de 15 posiciones de tipo oat.

String nombre [ ] = new String [5];


Declaracin y creacin de un arreglo llamado nombre de 5 posiciones de tipo
String.
El siguiente ejemplo muestra la declaracin, creacin, inicializacin y consulta de
un arreglo llamado edad de 5 posiciones de tipo entero:
public class Programa2
{
public static void main(String arg[])
{
int edad[]= new int[5];
edad[0]=18;
edad[1]=20;
edad[2]=15;
edad[3]=35;
edad[4]=53;
for(int i=0;i<5;i++)
{
System.out.println("El valor del arreglo edad en la posicion
"+i+" es "+edad[i]);
}
}
}
Al ejecutar el programa, el resultado es el siguiente:

13
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

Tambin es posible inicializar un arreglo en la misma lnea donde es declarado y


creado.
El siguiente ejemplo declara, crea e inicializa en la misma lnea de cdigo un
arreglo de 5 posiciones de tipo cadena con los nombres de 5 personas diferentes,
posteriormente se imprime el contenido del arreglo:
public class Programa3
{
public static void main(String arg[])
{
String nombre[]={"Juan","Pedro","Luis","Lina","Diana"};
for(int i=0;i<5;i++)
{
System.out.println(nombre[i]);
}
}
}
Al ejecutar el programa, el resultado es el siguiente:

14
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

2.2

Recorrido de un arreglo.

Como se ha visto anteriormente, el recorrido de un arreglo requiere de un ciclo


para pasar por cada una de sus posiciones; en el programa anterior, se aprecia el
uso del ciclo for para acceder a todas las posiciones del arreglo nombres.

public class Programa3


{
public static void main(String arg[])
{
String nombre[]={"Juan","Pedro","Luis","Lina","Diana"};
for(int i=0;i<5;i++)
{
System.out.println(nombre[i]);
}
}
}
Pero qu podra ocurrir al intentar acceder a una posicin inexistente de un
arreglo?. Este es un error comn en programacin, veamos el siguiente ejemplo:

public class Programa3A


{
public static void main(String arg[])
{
String nombre[]={"Juan","Pedro","Luis","Lina","Diana"};
for(int i=0;i<=5;i++)
{
System.out.println(nombre[i]);
}
}
}

15
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

El arreglo anterior es de 5 posiciones, las cuales estn comprendidas desde la


posicin 0 hasta la posicin 4.
Al intentar acceder la posicin 5 del arreglo, se lanzar una excepcin de tipo

ArrayIndexOutOfBoundsException

Afortunadamente existe una forma ms segura de recorrer un arreglo, esta es


utilizando un ciclo especial conocido como el ciclo for each.
Sintaxis:

for (TipoDato variable : Arreglo)

Permite recorrer todas las posiciones del arreglo, a travs de la variable


Ejemplo:

for (Stringx : nombre)

Recorre todas las posiciones del arreglo nombre a travs de la variable x


El ejercicio anterior, puede ser modicado para realizar el recorrido del arreglo de
manera segura mediante el uso del ciclo for each:

16
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

public class Programa3A


{
public static void main(String arg[])
{
String nombre[]={"Juan","Pedro","Luis","Lina","Diana"};
for(String x: Nombre)
{
System.out.println(x);
}
}
}

Al ejecutar el programa, el resultado es el siguiente:

2.3 Arreglos de Objetos.

17
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

2.3 Arreglos de Objetos.

De la misma manera como se declaran, crean, inicializan y acceden los arreglos


de tipos de datos primitivos se hace con los arreglos de objetos. De hecho el
arreglo de tipo String es un arreglo de objetos. Pero para entender mejor este
aspecto, vamos a implementar un programa que cree un arreglo de objetos
asociados a una clase personalizada.
El siguiente es el cdigo de la clase Alumno:
public class Alumno
{
private String nombre;
private double nota;
public Alumno(String nombre,double nota)
{
this.nombre=nombre;
this.nota=nota;
}
public String getNombre()
{
return nombre;
}
public double getNota()
{
return nota;
}
}

18
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

El programa 4, muestra la manera de crear un arreglo de objetos de la clase


Alumno y su respectivo procesamiento:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

public class Programa4


{
public static void main(String arg[])
{
Alumno estudiante[]=new Alumno[3];
estudiante[0]=new Alumno("Andres",3.5);
estudiante[1]=new Alumno("Julian",5);
estudiante[2]=new Alumno("Fabian",4.2);
for(Alumno al:estudiante)
{
System.out.println("El alumno "+al.getNombre()+" obtuvo una nota de "+al.getNota());
}
}
}

Linea 5 : Declaracin y creacin de un arreglo de 3 posiciones de tipo Alumno


Linea 6,7,8 : Declaracin y creacin de un arreglo de 3 posiciones de tipo Alumno
Linea 10 : Conguracin del ciclo for each para recorrer todas las posiciones del
arreglo de tipo Alumno llamado estudiante a travs de una variable
llamada al
Linea 12 : Acceso a los mtodos de cada objeto almacenado en el arreglo

Al ejecutar el programa, se obtiene el siguiente resultado:

19
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

3.0 COLECCIONES Y GENERICS


Los arreglos son una excelente herramienta de programacin, principalmente
cuando la cantidad de posiciones del mismo se mantiene constante, sin embargo, al
momento de incluir ms elementos dentro de un arreglo o al momento de querer
eliminar posiciones del mismo, los arreglos son inecientes.
En Java existen otras estructuras de almacenamiento conocidas como colecciones.
Una coleccin permite almacenar informacin en memoria de manera dinmica, es
decir, permite el aumento o disminucin del tamao de la coleccin de acuerdo con la
necesidad de la aplicacin.
3.1

Tipos de Colecciones y Caractersticas.

COLLECTION

List

ArrayList

Set

LinkedList

HashSet

TreeSet

20
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

ELEMENTO

TIPO

DESCRIPCION

Collection

Interfaz

Dene un conjunto de mtodos comunes a


las dems interfaces o clases que se
derivan de la interfaz Collection.

List

Interfaz

Maneja de manera ordenada los elementos


introducidos de acuerdo con el orden de
insercin. Permite elementos duplicados.

Set

Interfaz

Coleccin desordenada de objetos. No


permite elementos duplicados

Clase

Clase concreta que implementa la interfaz


List, esta clase se basa en un arreglo
dinmico. Permite un acceso rpido a los
elementos de la coleccin, pero es lenta
para la insercin o eliminacin de objetos.

ArrayList

LinkedList

HashSet

TreeSet

Clase

Clase concreta que implementa la interfaz


List, esta clase se basa en una lista
enlazada. Es muy til cuando la cantidad
de elementos de la coleccin es muy
variable. El acceso a un elemento
particular de la coleccin es ms lento.

Clase

Clase concreta que implementa la interfaz


Set. Los elementos de esta clase no
permiten duplicados y no se almacenan en
orden no determinado.

Clase

Clase concreta que implementa la interfaz


Set. Los elementos de esta clase no
permiten duplicados y sus elementos se
ordenan de manera ascendente.

Para usar cualquier elemento de la API de Colecciones, se debe implementar el


paquete java.util

21
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

3.2

Uso de la clase ArrayList.

Para comprender mejor el uso de la clase ArrayList, se presenta el siguiente


ejemplo:
import java.util.ArrayList;
public class TestArrayList
{
public static void main(String arg[])
{
//Crea, llena e imprime una lista con nmeros
ArrayList listaNums= new ArrayList();
listaNums.add(8);
listaNums.add(3);
listaNums.add(5);
listaNums.add(2);
listaNums.add(3);
System.out.println("Lista de numeros: "+listaNums);
//-----------------------------------------//Crea, llena e imprime una lista con nombres
ArrayList listaNombres= new ArrayList();
listaNombres.add("Juan");
listaNombres.add("Pedro");
listaNombres.add("Carlos");
listaNombres.add("Daniel");
listaNombres.add("Carlos");
System.out.println("Lista de nombres:"+listaNombres);
//-----------------------------------------//Obtener un elemento particular de la lista
System.out.println("Numero posicion 2:"+listaNums.get(2));
System.out.println("Nombre posicion 0:"+listaNombres.get(0));
//Reemplazar un elemento de la lista
listaNums.set(0,15);
listaNombres.set(0,"Claudia");
//Las listas quedan as:
System.out.println("Lista de numeros: "+listaNums);
System.out.println("Lista de nombres:"+listaNombres);
}
}

La clase ArrayList est basada en un arreglo dinmico y permite gestionar su


contenido a travs de posiciones especcas. Por implementar la interfaz List, el
almacenamiento de sus datos se da de acuerdo con el orden de insercin y
permite los elementos repetidos.

22
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

3.3

Uso de la clase LinkedList.

Para comprender mejor el uso de la clase LinkedList, se presenta el siguiente


ejemplo:
import java.util.LinkedList;
public class TestLinkedList
{
public static void main(String arg[])
{
//Crea, llena e imprime una lista con nmeros
LinkedList listaNums= new LinkedList();
listaNums.add(8);
listaNums.add(3);
listaNums.add(5);
listaNums.add(2);
listaNums.add(3);
//Insertar un nuevo dato al inicio de la lista
listaNums.addFirst(10);
System.out.println("Lista de numeros: "+listaNums);
//-----------------------------------------//Crea, llena e imprime una lista con nombres
LinkedList listaNombres= new LinkedList();
listaNombres.add("Juan");
listaNombres.add("Pedro");
listaNombres.add("Carlos");
listaNombres.add("Daniel");
listaNombres.add("Carlos");
//Insertar un nuevo dato al inicio de la lista
listaNombres.addFirst("Julian");
System.out.println("Lista de nombres:"+listaNombres);
//-----------------------------------------//Obtiene y remueve el primer elemento de la lista
System.out.println("Elemento removido:"+listaNums.poll());
System.out.println("Elemento removido:"+listaNombres.poll());
//Las listas quedan as:
System.out.println("Lista de numeros: "+listaNums);
System.out.println("Lista de nombres:"+listaNombres);
}
}

La clase LinkedList est basada en una lista doblemente enlazada, en la que se


conoce cul es el primer elemento y ltimo elemento de la lista, por esta razn, se
facilitan las operaciones que se hacen al principio o al nal de la lista como la
insercin o eliminacin de elementos. Por implementar la interfaz List, el
almacenamiento de sus datos se da de acuerdo con el orden de insercin y
permite los elementos repetidos.

23
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

3.4

Uso de la claseHashSet.

Para comprender mejor el uso de la clase HashSet, se presenta el siguiente


ejemplo:
import java.util.HashSet;
public class TestHashSet
{
public static void main(String arg[])
{
//Crea, llena e imprime una lista con nmeros
HashSet listaNums= new HashSet();
listaNums.add(8);
listaNums.add(3);
listaNums.add(5);
listaNums.add(2);
listaNums.add(3);
System.out.println("Lista de numeros: "+listaNums);
//-----------------------------------------//Crea, llena e imprime una lista con nombres
HashSet listaNombres= new HashSet();
listaNombres.add("Juan");
listaNombres.add("Pedro");
listaNombres.add("Carlos");
listaNombres.add("Daniel");
listaNombres.add("Carlos");
System.out.println("Lista de nombres:"+listaNombres);
//-----------------------------------------//Remueve un elemento de la lista
listaNums.remove(5);
listaNombres.remove("Pedro");
//Las listas quedan as:
System.out.println("Lista de numeros: "+listaNums);
System.out.println("Lista de nombres:"+listaNombres);
}
}

La clase HashSetbasa la organizacin de sus elementos en un algoritmo especial,


mediante el cual, cada elemento posee una clave o identicador no manipulable
a travs del cual se realiza el ordenamiento y bsqueda de los elementos de la
coleccin. Por esta razn el orden de los elementos almacenados en la coleccin
es indeterminado. Al implementar la interfaz Set, la clase HashSet tiene la
caracterstica de no permitir elementos duplicados.

24
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

3.5

Uso de la clase TreeSet.

Para comprender mejor el uso de la clase TreeSet, se presenta el siguiente


ejemplo:

import java.util.TreeSet;
public class TestTreeSet
{
public static void main(String arg[])
{
//Crea, llena e imprime un conjunto con nmeros
TreeSet listaNums= new TreeSet();
listaNums.add(8);
listaNums.add(3);
listaNums.add(5);
listaNums.add(2);
listaNums.add(3);
System.out.println("Lista de numeros: "+listaNums);
//-----------------------------------------//Crea, llena e imprime un conjunto con nombres
TreeSet listaNombres= new TreeSet();
listaNombres.add("Juan");
listaNombres.add("Pedro");
listaNombres.add("Carlos");
listaNombres.add("Daniel");
listaNombres.add("Carlos");
System.out.println("Lista de nombres:"+listaNombres);
//-----------------------------------------//Elementos mayores a un elemento dado
System.out.println("Numeros mayores o iguales a 3:"+listaNums.tailSet(3));
System.out.println("Nombres mayores o iguales a Daniel:"+listaNombres.tailSet("Daniel"));

//Se muestran los datos en orden descendente


System.out.println("Numeros en orden descendente: "+listaNums.descendingSet());
System.out.println("Nombres en orden descendente:"+listaNombres.descendingSet());
}
}

La clase TreeSet mantiene siempre los elementos de la coleccin de manera


ordenada. Al implementar la interfaz Set, la clase TreeSet tiene la caracterstica
de no permitir elementos duplicados. Posee un conjunto de mtodos que
permiten aprovechar la ventaja de mantener siempre los datos ordenados.

25
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

3.6

Los generics y las colecciones.

Los datos que se almacenan en una coleccin siempre son de tipo Object, esto
signica que tericamente en una coleccin podemos almacenar cualquier dato.
Esto aunque a primera vista parece una ventaja, en la prctica presenta
dicultades, en primer lugar por la falta de seguridad en los datos almacenados y
en segundo lugar, por la necesidad de hacer casting o conversiones en los datos
almacenados para pasarlos del tipo Object a su tipo real.
Veamos el siguiente ejemplo:
import java.util.ArrayList;
public class Generics1
{
public static void main(String arg[])
{
//Se crea una coleccin y se le asignan datos
//de diferentes tipos
ArrayList miLista= new ArrayList();
miLista.add(4);
miLista.add("Juan");
miLista.add(new Alumno("Pedro",4.3));
}
}

El programa anterior compila sin problemas, porque una coleccin recibe datos de
cualquier tipo, debido a que todos los datos al interior de la coleccin son tratados
como datos de tipo Object. Esta caracterstica no le permite al programador tener
un control en tiempo de compilacin sobre la integridad de los datos almacenados.
Si se intenta recuperar la informacin de la lista en diferentes variables, se
generan errores de compilacin, por incompatibilidad de tipo de datos:

26
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

import java.util.ArrayList;
public class Generics1
{
public static void main(String arg[])
{
//Se crea una coleccin y se le asignan datos
//de diferentes tipos
ArrayList miLista= new ArrayList();
miLista.add(4);
miLista.add("Juan");
miLista.add(new Alumno("Pedro",4.3));
//Para obtener los datos en su original tipo
//se requiere hacer casting.
int a = miLista.get(0);
String b = miLista.get(1);
Alumno c = miLista.get(2);
}
}

Las instrucciones anteriores generan error de compilacin.


Para permitir recuperar los datos en su plenitud, es necesario hacer casting de
datos, es decir, realizar una conversin de datos entre el tipo Object (que es por
defecto el tipo de dato de cualquier elemento al interior de una coleccin) y el tipo
de dato deseado.

27
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

import java.util.ArrayList;
public class Generics1
{
public static void main(String arg[])
{
//Se crea una coleccin y se le asignan datos
//de diferentes tipos
ArrayList miLista= new ArrayList();
miLista.add(4);
miLista.add("Juan");
miLista.add(new Alumno("Pedro",4.3));
//Para obtener los datos en su original tipo
//se requiere hacer casting.
int a = ( Intiger )miLista.get(0);
String b = ( String ) miLista.get(1);
Alumno c = ( Alumno ) miLista.get(2);
}
}

Para tener mayor control sobre los datos que se almacenan en una coleccin y
para evitar la necesidad de realizar una gran cantidad de casting a la hora de
trabajar con colecciones, a partir de la versin 5 de Java se incluye el concepto
de Generics. Los generics permiten asignarle a una coleccin un tipo de dato
predeterminado. La sintaxis para la denicin de una coleccin con Generics es
la siguiente:

28
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

TipoColeccin<TipoDato> nombreColeccion = new


TipoColeccin<TipoDato>();
Ejemplo:
LinkedList<String>ciudades = new LinkedList<String> ();

import java.util.ArrayList;
public class Generics2
{
public static void main(String arg[])
{
//Se crea una coleccin de tipo entero para
//el almacenamiento y procesamiento de numeros
ArrayList<Integer> listaNums = new ArrayList<Integer>();
listaNums.add(2);
listaNums.add(7);
listaNums.add("Juan");
}
}
En la lnea 9 se dene una coleccin y se especica que solo almacenar datos
de tipo entero, usando Generics. En la lnea 12 se intenta agregar un dato de otro
tipo, con lo cual se genera un error en tiempo de compilacin:

29
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

El siguiente ejemplo muestra el uso de colecciones con Generics:

import java.util.ArrayList;
import java.util.LinkedList;
public class Generics3
{
public static void main(String arg[])
{
//Se crea una coleccin de tipo entero para
//el almacenamiento y procesamiento de numeros
ArrayList<Integer> listaNums = new ArrayList<Integer>();
listaNums.add(2);
listaNums.add(7);
listaNums.add(5);
//Se crea una coleccin de tipo string para
//el almacenamiento y procesamiento de cadenas de caracteres
LinkedList<String> listaCiudades = new LinkedList<String>();
listaCiudades.add("Manizales");
listaCiudades.add("Medellin");
listaCiudades.add("Cali");
//Se crea una coleccin de tipo Alumno para
//el almacenamiento y procesamiento de Alumnos
ArrayList<Alumno> alumnos = new ArrayList<Alumno>();
alumnos.add(new Alumno("Andres",3.2));
alumnos.add(new Alumno("Julian",4.2));
alumnos.add(new Alumno("Carlos",4.9));
//Procesamiento de los datos almacenados en las colecciones
//sin necesidad de casting
int a=listaNums.get(0);
String b=listaCiudades.get(0);
Alumno c=alumnos.get(0);
System.out.println("El primer numero es "+a);
System.out.println("La primera ciudad es "+b);
System.out.println("El alumno "+c.getNombre()+" obtuvo una nota de "+c.getNota());
}
}

El resultado de ejecutar el anterior programa es el siguiente:

30
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

ARREGLOS Y COLECCIONES EN JAVA

Control de Documento
Construccin Objeto de Aprendizaje
Arreglos y Colecciones en JAVA
Desarrollador de contenido
Experto temtico

Andrs Julin Valencia Osorio

Asesor Pedaggico

Rafael Neftal Lizcano Reyes

Productor Multimedia

Carlos Julian Ramirez Benitez

Programadores

Daniel Eduardo Martnez Daz

Lder Expertos Temticos

Ana Yaqueline Chavarro Parra

Lder lnea de produccin

Santiago Lozada Garcs

31
FAVA - Formacin en Ambientes Virtuales de Aprendizaje

SENA - Servicio Nacional de Aprendizaje

También podría gustarte