0% encontró este documento útil (0 votos)
10 vistas35 páginas

Estructuras de Almacenamiento en Java

La Unidad 5 se centra en la aplicación de estructuras de almacenamiento, específicamente en el uso de arrays y listas en programación. Se abordan conceptos como la creación, recorrido y manipulación de arrays, así como el uso de clases y métodos genéricos, expresiones regulares y documentos XML. Además, se presentan ejemplos prácticos de implementación de arrays en Java y su manipulación mediante la clase Arrays.

Cargado por

perez.arrob24
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 PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
10 vistas35 páginas

Estructuras de Almacenamiento en Java

La Unidad 5 se centra en la aplicación de estructuras de almacenamiento, específicamente en el uso de arrays y listas en programación. Se abordan conceptos como la creación, recorrido y manipulación de arrays, así como el uso de clases y métodos genéricos, expresiones regulares y documentos XML. Además, se presentan ejemplos prácticos de implementación de arrays en Java y su manipulación mediante la clase Arrays.

Cargado por

perez.arrob24
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 PPTX, PDF, TXT o lee en línea desde Scribd

LOGO

UNIDAD 5

Aplicación de las estructuras de


almacenamiento
Contenido

R.A.6: Escribe programas que manipulen información


seleccionando y utilizando tipos avanzados de datos.

CRITERIOS DE PROCEDIMIENTOS
EVALUACIÓN CONTENIDOS
EVALUACIÓN ESENCIALES
a) Se han escrito
programas que utilicen
arrays
b) Se han reconocido las PE 5. Desarrollar
Concepto de Array.
librerías de clases programas que usen
Tipos. Creación de
relacionadas con tipos arrays estáticos y
arrays. Recorrido y
de datos avanzados. dinámicos, listas e
búsquedas en un array.
c) Se han utilizado listas iteradores que
Arrays
para almacenar y recorran dichas listas,
Prueba Práctica 2 multidimensionales
procesar información. identificando las
(90%) Estructuras. Definición y
d) Se han utilizado distintas colecciones
uso.
iteradores para de datos disponibles; y
Concepto de Lista. Tipos.
recorrer los elementos usando las
Operaciones.
de las listas. características de Java
Características de Java 8.
e) Se han reconocido las 8, para trabajar con
Expresiones lambda.
características y dichas colecciones
ventajas de cada una
de la colecciones de
datos disponibles
f) Se han creado clases y Clases y métodos
métodos genéricos. genéricos
Cadenas de caracteres.
Uso de las cadenas.
g) Se han utilizado Recorrido y
expresiones regulares PE 6. Desarrollar
manipulación. Uso de
en la búsqueda de programas donde se
expresiones regulares en
patrones en cadenas usen clases y métodos
cadenas de texto.
de texto. genéricos, se trabaje
NOTA DUAL (10%) Aplicación del estándar
h) Se han identificado las con la clase String y
XML. Concepto de XML
clases relacionadas con expresiones regulares,
Estructura de un
el tratamiento de y se lean y escriban
documento XML.
documentos XML ficheros XML
Especificación de
i) Se han realizado documentos. DTD y XSD.
programas que realicen Clases para la creación y
manipulaciones sobre manipulación de
documentos XML. documentos XML.
Concepto de array. Crear un Array
Estructura de datos que permite almacenar varios valores del mismo
tipo en una sola variable. Cada valor se guarda en una posición (índice)
numerada, comenzando desde 0.
con variables discretas con un array
temp 2 int[ ] temp = new int[7]; 1
int temp0 = 23; temp0 23 23 temp[0] = 23;
int temp1 = 25; temp1 25 25 temp[1] = 25;
int temp2 = 27; temp2 27 27 temp[2] = 27;
int temp3 = 16; temp3 16 16 3 temp[3] = 16;
int temp4 = 24; temp4 24 24 temp[4] = 24;
int temp5 = 23; temp5 23 23 temp[5] = 23;
int temp6 = 20; temp6 20 20 temp[6] = 20;

1 + 2 + 3
int[ ] temp = { 23, 25, 27, 16, 24, 23, 20 };

¿Cómo mostrar la temperatura del martes? índice

...print( temp1 ) 25 ...print( temp[1] ) 25


Recorrer un Array

Vamos a mostrar todas las temperaturas de la semana

temp
temp0 23 0 23
temp1 25 1 25
temp2 27 2 27
temp3 16 3 16
temp4 24 4 24
temp5 23 5 23
temp6 20 6 20

[Link]( temp0 ); [Link] (Tamaño del array)


[Link]( temp1 );
[Link]( temp2 ); for(int i= 0; i < 7; i++)
[Link]( temp3 ); [Link]( temp[i] );
[Link]( temp4 );
[Link]( temp5 );
[Link]( temp6 );
Ejemplo de uso de array en clase I

public class Temperatura {


CLASE
int[ ] temp ; = new int[7] ;
Temperatura
public Temperatura( int tam ) {
temp temp = new int[ tam
7 ];
23 }
25
public void generar() {
27
for(int i= 0; i < [Link] ; i++)
20 temp[i] = (int)([Link]()*15+20);
24
}
33
30 public void mostrar() {
for(int i= 0; i < [Link] ; i++)
[Link]( temp[i] );
}
}
Ejemplo de uso de array en clase II

public class Temperatura {


CLASE int[ ] temp;
Temperatura
public Temperatura(int tam) { . . . }
public void generar() { . . . }
temp public void mostrar() { . . . }
23
public int getSuma() {
25
int suma = 0;
27
for(int i= 0; i < [Link] ; i++)
20 suma += temp[i] ;
24 return suma;
33 }
30 public float getMedia() {
return getSuma() / [Link];
}

}
Ejemplo de uso de array en clase III

public class Temperatura {


CLASE
int[ ] temp;
Temperatura
public Temperatura(int tam) { . . . }
public void generar() { . . . }
temp
public void mostrar() { . . . }
23 m
public int getSuma() {. . . }
i 22
public float getMedia() {. . . }
27
20 public int getMayor() {
24
33 int m = 0;
for(int i= 1; i < [Link] ; i++)
30
if( temp[i] > temp[m] )
m = i;
return temp[m] ;
}
}
Ejemplo de uso de array en clase IV

public class Temperatura {

CLASE int[ ] temp;


public Temperatura(int tam) { . . . }
Temperatura public void generar() { . . . }
public void mostrar() { . . . }
public int getSuma() {. . . }
temp
public float getMedia() { . . . }
23 public int getMayor() { . . . }
22 public boolean hayMayor (int num) {
27 for(int i= 0; i < [Link] ; i++)
20 if(temp[i] >num )
return true;
24
return false;
33 }
30 public int cuentaMayores (int num) {
int cont = 0;
for(int i= 0; i < [Link] ; i++)
if(temp[i] > num )
cont++;
return cont;
}
}
for mejorado
Sirve para recorrer arrays fácilmente, sin
necesidad de usar índices.

for(int i= 0; i < [Link] ; i++)


[Link]( temp[i] );

i i i i i i i
0 1 2 3 4 5 6
temp 23 25 27 20 24 33 30
n n n n n n n

for( int n : temp)


[Link]( n );

No puedes modificar contenido del array (dado que no tenemos el elemento en


sí, sino una copia del elemento, ni acceder a los índices)
Relleno progresivo de Array
public class ListaFiesta {
String[ ] lista;
int siguiente = 0 ;
CLASE
ListaFiesta public ListaFiesta( int tam ) {
lista = new String[tam ] ;
}
lista
siguien Ana public boolean registrar (String invitado) {
te
siguien Luis
te
siguien if(siguiente >= [Link])
Enrique
te
siguien return false;
Alfredo
te
siguien else {
Rocío
te
siguien lista[siguiente] = invitado;
Teresa
te
siguien siguiente++;
Roberto
te
siguien return true;
te }
}

}
Número de parámetros variable
Puede establecerse que un método reciba un número
indeterminado de parámetros del mismo tipo.

Los parámetros se reciben en el método como un


array, a pesar de no haber sido declarado como tal


…println( suma(23, 25, 27, 16, 24, 23, 20) );
…println( suma(23, 25, 27) );

int suma(int… valores) { valores
suma = 0; 23
for( int valor : valores) 25
suma += valor; 27
return suma; 16
} 24
23
Int… valores se comporta internamente como int[ ] valores 20
Clase Arrays
La clase predefinida Arrays proporciona métodos estáticos
para realizar operaciones habituales sobre arrays.

ordena en forma ascendente


SORT
double[] arrayDouble = { 8.4, 9.3, 0.2, 7.9, 3.4 };
[Link]( arrayDouble );

0 1 2 3 4
arrayDouble 8.4 9.3 0.2 7.9 3.4

busca un elemento en un array ordenado


BINARY SEARCH
int[] arrayInt = { 15, 18, 23, 30, 32, 38, 39 };
int posición = [Link]( arrayInt, 23 );

0 1 2 3 4 5 6
arrayInt 15 18 23 30 32 38 39
Clase Arrays

rellena un array con el valor deseado


FILL
int[] arrayInt = new int[7];
[Link]( arrayInt, 23 );

arrayInt 23 23 23 23 23 23 23

copia parte del contenido de un array en otro


[Link]

int[] A = {5, 4, 7, 6, 8};


int[] B = {1, 1, 1, 1, 1, 1, 1, 1};
[Link]( A , 2 , B , 4 , 3 );

0 1 22 3 4
A 5 4 7 6 8
0 1 2 3 4 5 6 7
B 1 1 1 1 1 1 1 1
Clase Arrays

TOSTRING
Imprime por pantalla el contenido del array

int[] arrayInt = {8, 41, 37, 22, 19}


[Link]([Link](arrayInt));

[8, 41, 37, 22, 19]

Compara si dos tablas son iguales elemento a elemento


EQUALS

int[] t1={4, 5, 6}
int[] t2={4, 5, 6}
[Link]([Link](t1,t2)) //Muestra true
Clase Arrays

Realiza una copia exacta del array


COPYOF

int[] arrayInt = {8, 41, 37, 22, 19};


Int[] copia=[Link](arrayInt, [Link])
[Link]([Link](copia));

[8, 41, 37, 22, 19]

CopyOfRange  Permite copiar parte de un array. Investiga


sobre este método y realiza un ejemplo
Array de Objetos
public class Agenda {
Persona Antes de añadir Persona[ ] contactos;
String una Persona int siguiente = 0;
nombre habría que
String comprobar que public Agenda(int tam) {
telefono aún queda sitio contactos = new Persona[tam ] ;
}
Agenda Catalina public boolean insertar(Persona per) {
956071456
public void insertar(Persona
if(siguiente per) {
>= [Link])
contactos contactos[siguiente]
return false; = per;
siguiente++;
contactos[siguiente++] = per;
siguien Antonio
} return true;
te 856435657

public String getTelefono(String nom) {


Víctor for(int i=0; i< siguiente ; i++) {
null 614834764 Persona per = contactos[i];
null String nombre = [Link]();
if( [Link](nom))
null Nuria return [Link]();
612561437 }
return null;
} }
Array Bidimensional
Supongamos que deseamos almacenar
3 temperaturas cada día de una semana.
días horas
filas columna
creación s

temperaturas int[ ] [ ] temperaturas = new int[7] [3] ;


0 1 2
asignación
0 20 23 25 lunes Poner 23º el jueves a las 21h
1 21 25 27 martes temperaturas [3] [2] = 23 ;
2 23 27 29 miércoles
creación + asignación
3 15 20 23 jueves
int[ ] [ ] temperaturas =
4 22 24 27 viernes
{
5 26 33 30 sábado
{ 20, 23, 25 } ,
6 27 30 28 doming { 21, 25, 27 } ,
6h 13h 21h o { 23, 27, 29 } ,
{ 15, 20, 23 } , int[ ] fila = temperaturas [3] ;
{ 22, 24, 27 } , int temp = fila[2] ;
{ 26, 33, 30 } ,
{ 27, 30, 28 }
};
Recorrer Array Bidimensional

temperaturas
0 1 2 for común

0 20 23 25 for(int fila = 0; fila < 7 ; fila ++)


1 21 25 27 for(int col = 0; col < 3 ; col ++)
2 23 27 29 ...println( temperaturas [fila] [col] );
3 15 20 23
4 22 24 27 for mejorado
5 26 33 30
for(int[] fila : temperaturas )
6 27 30 28 for(int temp : fila )
...println( temp );
int[ ] [ ] temperaturas =
{
{ 20, 23, 25 } , Híbrido
{ 21, 25, 27 } ,
{ 23, 27, 29 } , for(int[] fila : temperaturas )
{ 15, 20, 23 } , for(int col = 0; col < 3 ; col ++)
{ 22, 24, 27 } , ...println(fila [col] );
{ 26, 33, 30 } ,
{ 27, 30, 28 }
};
Medidas Array Bidimensional
[Link]
¿Qué devuelve ? ¿7, 3 o 21?
7
int[ ] [ ] temperaturas =
temperaturas
{
0 1 2
{ 20,fila
23, 25 } ,
0 20 23 25
1 21 25 27 { 21,fila
25, 27 } ,

2 23 27 29 { 23,fila
27, 29 } ,
3 15 20 23 { 15,fila
20, 23 } ,
4 22 24 27 { 22,fila
24, 27 } ,
5 26 33 30 { 26,fila
33, 30 } ,
6 27 30 28 { 27,fila
30, 28 }
};

int[ ] fila = temperaturas [3] ;


[Link] 3 temperaturas [3] .length
Colecciones

❖ En Java, una colección (o collection) es una estructura de


datos dinámica que permite almacenar, organizar y
manipular grupos de objetos.

❖ A diferencia de los arrays, las colecciones:


▪ Pueden cambiar de tamaño dinámicamente (no es necesario
especificar la cantidad de elementos al crearla).
▪ Ofrecen métodos útiles para insertar, eliminar, buscar, recorrer
y ordenar elementos.
▪ Permiten diferentes tipos de estructuras según las necesidades
(listas, conjuntos, colas, mapas, etc.).

❖ Todas las colecciones en Java forman parte del Framework


de Colecciones (Java Collections Framework, o JCF), que se
encuentra en el paquete [Link].
API Collections

❖ El Java Collections Framework (JCF) está organizado en una


jerarquía de interfaces y clases que definen cómo se comportan
los diferentes tipos de colecciones.
Interface Collection

❖ Todos los tipos de colección (menos Map) heredan de Collection<E>.


LIST

❖ Son colecciones ordenadas que permiten elementos


duplicados y acceso por índice

ArrayList - Basado en un array dinámico.


- Acceso rápido por índice (O(1)).
- Inserciones/eliminaciones intermedias más lentas
(O(n)).
- Ideal para lecturas frecuentes.
LinkedList - Basado en una lista doblemente enlazada.
- Inserciones y eliminaciones rápidas (O(1) si se
tiene la referencia).
- Acceso por índice más lento (O(n)).
- Ideal para estructuras tipo cola o pila.
Vector - Similar a ArrayList, pero sincronizado (seguro en
hilos).
- Hoy se usa poco; se prefiere ArrayList.
LIST

❖ CONSTRUCCIÓN DE UN LIST

❖ A partir de Java 1.5


▪ Inclusión de los genéricos
▪ Permiten parametrizar el tipo
▪ List<String> cars = new ArrayList<String>();

❖ A partir de Java 1.7


▪ Operador diamond
▪ Nos ahorra indicar dos veces el tipo
▪ List<String> cars = new ArrayList<>();
ArrayList
crear estructura
amigos ArrayList< String > amigos = new ArrayList< String > ( ) ;
0 Enrique
Ana
añadir elementos obtener elemento por índice
1 Luis
2 Alfredo [Link]("Ana"); [Link]( 4 ); "Rocío"
[Link]("Luis");
3 Rocío [Link]( 0, "Enrique"); buscar elemento
4 Teresa
Rocío [Link]( 2, "Alfredo");
[Link]( 7 , "Rocio"); [Link]( "Rocío" ); 4
5 Roberto
Teresa
[Link]("Rocio");
6 Roberto [Link]("Teresa"); averiguar si existe elementos
[Link]("Roberto"); [Link]( "Rocío" ); true
[Link]( "Miriam" ); false
eliminar elementos
ordenar [Link] ( "Teresa" ); obtener tamaño
[Link]( 5 );
[Link](amigos); [Link]( ); [Link]( ); 7

recorrer con for común recorrer con for mejorado


for(int i= 0; i < [Link]( ) ; i++) for( String amigo : amigos )
[Link]([Link]( i ) ); [Link]( amigo );
for-each

❖ Nos permite recorrer de una forma muy simple los elementos de


cualquier colección.
❖ La sintaxis de la estructura for-each es la siguiente:

❖ Usando la nueva construcción para el bucle for el código sería tan


sencillo y elegante como esto:
for-each

Limitaciones de estructura for-each


Iteradores

❖ Un iterador (del inglés iterator) es un objeto especial que


permite recorrer los elementos de una colección uno a uno, sin
conocer su estructura interna (es decir, sin importar si es una
lista, un conjunto, una cola, etc.).

❖ 👉 Es como un “cursor” que apunta al siguiente elemento de la


colecció[Link] Java, los iteradores se definen en la interfaz
Iterator<E>, del paquete [Link].

❖ Un iterador te permite:
▪ Recorrer una colección elemento a elemento.
▪ Comprobar si quedan más elementos por recorrer.
▪ Eliminar elementos de manera segura durante la iteración
Ejemplo de uso de iteradores

- Crea la clase Empleado (código, nombre completo,


sueldo). Constructores y métodos get-set
- En una clase Test, crea una lista de Empleados e
insértalos en una lista.
- Vamos a ver como podemos recorrer la lista a través
de iteradores
Ejemplo de uso de iteradores

- ¿Y por qué usar iteradores y no bucles for


mejorados?
- Hay casos en los cuales es imprescindible usar
iteradores.
- Prueba el siguiente ejemplo:
- Introducir en una lista, cinco empleados
- Recorre la lista y para cada elemento,
comprueba si el sueldo es mayor que 1000, y de
ser así, borra el elemento
- ¿Qué pasa con for mejorado?
- ¿Y con iteradores?
SET

❖ No puede contener elementos repetidos.

HashSet - No garantiza orden.


- Muy eficiente en búsqueda/inserción/eliminación (O(1)
promedio).
- Usa hashCode() y equals() para comparar objetos.

LinkedHashSet - Mantiene el orden de inserción.


- Rendimiento un poco menor que HashSet.

TreeSet - Mantiene los elementos ordenados según su orden natural


o un Comparator.
- Basado en un árbol rojo-negro (O(log n)).
SET
Interfaz Map

❖ Un Map no es técnicamente una Collection, pero forma


parte del framework. Permite asociar claves únicas con
valores. Cada elemento tiene estructura clave, valor.
MAP

❖ La Interface Map ([Link]) en Java, nos permite representar una


estructura de datos para almacenar pares "clave/valor"; de tal manera que
para una clave solamente tenemos un valor. Esta estructura de datos
también es conocida en otros lenguajes de programación como
"Diccionarios", aunque en cada lenguajes esta estructura de datos tiene
sus matices.

HashMap - Basado en tabla hash.


- No garantiza orden.
- Muy eficiente (O(1) promedio).
LinkedHashMap - Mantiene el orden de inserción.
- Útil para cachés o historiales.
TreeMap - Ordena las claves.
- Basado en un árbol rojo-negro.
Ejemplo HashMap

Prueba a crear una clase Jugador con los datos del jugador
(nombre, apellidos, dorsal). Utiliza el HashMap con objetos de
esa clase. Ánimo!!!!

También podría gustarte