Arreglos Colecciones Java
Arreglos Colecciones Java
ESTRUCTURA DE CONTENIDOS
1.
2.
3.
COLECCIONES Y GENERICS
3.1
3.2
3.3
3.4
3.5
3.6
1
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
MAPA CONCEPTUAL
2
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
INTRODUCCIN
3
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
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
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++)
{
//????????????????
}
}
}
4
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
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
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;
Salario
1
2
3
4
5
6
1200000
1500000
950000
800000
1100000
7800000
5
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
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
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++;
}
}
}
}
5
6
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
1
2
3
4
5
6
Salario
1200000
1500000
950000
800000
1100000
7800000
SalarioPromedio cantEmplSalSup
1055000
7
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
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
6
Aceptar
1200000
Aceptar
1500000
Aceptar
950000
Aceptar
800000
Aceptar
1100000
Aceptar
780000
Aceptar
9
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
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
10
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
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
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
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);
}
}
12
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
13
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
14
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
2.2
Recorrido de un arreglo.
15
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
ArrayIndexOutOfBoundsException
16
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
17
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
18
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
19
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
COLLECTION
List
ArrayList
Set
LinkedList
HashSet
TreeSet
20
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
ELEMENTO
TIPO
DESCRIPCION
Collection
Interfaz
List
Interfaz
Set
Interfaz
Clase
ArrayList
LinkedList
HashSet
TreeSet
Clase
Clase
Clase
21
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
3.2
22
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
3.3
23
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
3.4
Uso de la claseHashSet.
24
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
3.5
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"));
25
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
3.6
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
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);
}
}
27
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
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
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
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());
}
}
30
FAVA - Formacin en Ambientes Virtuales de Aprendizaje
Control de Documento
Construccin Objeto de Aprendizaje
Arreglos y Colecciones en JAVA
Desarrollador de contenido
Experto temtico
Asesor Pedaggico
Productor Multimedia
Programadores
31
FAVA - Formacin en Ambientes Virtuales de Aprendizaje