Programación

1º DAM/DAW - Curso 2024-2025

User Tools

Site Tools


apuntes:colecciones

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
apuntes:colecciones [2023/06/04 18:46] – [La clase LinkedList] Santiago Faciapuntes:colecciones [2023/06/04 21:03] (current) – [Ejercicios] Santiago Faci
Line 42: Line 42:
 {{ comparison.jpg }} {{ comparison.jpg }}
 <caption>Colecciones en Java</caption></figure> <caption>Colecciones en Java</caption></figure>
 +
 +===== Interface Collection =====
 +
 +Es la interface padre de todas las colecciones Java
 +
 +Define una serie de método que cualquier colección tiene que implementar:
 +  * ''boolean add(E e)''
 +  * ''boolean addAll(Collection<E> c)''
 +  * ''void clear()''
 +  * ''boolean contains(E e)''
 +  * ''boolean isEmpty()''
 +  * ''Iterator<E> iterator()''
 +  * ''boolean remove(E e)''
 +  * ''boolean removeAll(Collection<E> c)''
 +  * ''int size()''
 +  * ''Object[] toArray()''
 +  * ''<T> T[] toArray(T[] a)''
  
 ===== Listas ===== ===== Listas =====
Line 49: Line 66:
 <caption>Colecciones en Java</caption></figure> <caption>Colecciones en Java</caption></figure>
  
-==== La clase ArrayList ====+==== List ====
  
-La clase ''ArrayList'' permite definir arrays dinámicos. Son colecciones de datos dinámicas con el acceso y funcionamiento de un array, +Es la interface padre de todas las colecciones de tipo Lista: 
-puesto que sólo es posible recuperar cada elemento a partir de la posición del mismo.+ 
 +  * Define una serie de método que cualquier colección tiene que implementar 
 +    * ''E get(i)'' 
 +    * ''int indexOf(e)'' 
 +    * ''void sort(Comparator<? super E> c)'' 
 + 
 +==== ArrayList ==== 
 + 
 +La clase ''ArrayList'' permite definir arrays dinámicos. Son colecciones de datos dinámicas con el acceso y funcionamiento de un array, puesto que sólo es posible recuperar cada elemento a partir de la posición del mismo. 
 + 
 +  * Implementa la interface ''List'' 
 +  * Es el tipo de colección más genérica 
 +  * Define una colección de elementos sin ninguna característica especial 
 +  * Los elementos se pueden obtener a partir de la posición donde fuera añadidos
  
 Entre las operaciones que se pueden realizar con un \verb ArrayList  las más comunes son las siguientes: Entre las operaciones que se pueden realizar con un \verb ArrayList  las más comunes son las siguientes:
Line 104: Line 134:
 </code> </code>
  
-==== La clase LinkedList ====+==== LinkedList ====
  
 La clase ''LinkedList'' es una lista doblemente enlazada, que permite almacenar una colección de objetos, obtenerlos, eliminarlos y algunas operaciones para acceder a los mismos. Acceder al primer y último elemento, entre otros, son operaciones muy directas en este tipo de colección. La clase ''LinkedList'' es una lista doblemente enlazada, que permite almacenar una colección de objetos, obtenerlos, eliminarlos y algunas operaciones para acceder a los mismos. Acceder al primer y último elemento, entre otros, son operaciones muy directas en este tipo de colección.
Line 188: Line 218:
 </code> </code>
  
 +==== Vector ====
 +
 +  * Implementa la interface ''List''
 +  * Se trata de la misma implementación que ''ArrayList'' pero sincronizada para su uso en entornos concurrentes
 +
 +==== Stack ====
 +
 +Las Pilas son colecciones de datos donde éstos se colocan //apilándolos// y sólo puede ser retirado el elemento que se encuentra encima de la pila. Siguen el principio [[https://es.wikipedia.org/wiki/Last_in,_first_out|LIFO]] (Last In First Out) donde el último elemento en llegar a la colección es el primero en salir de la misma.
 +
 +  * Implementa la interface ''List''
 +  * Permite manejar una lista como si se tratara de una estructura //LIFO// (Last In First Out), también conocidas como pilas.
 +  * Define métodos (''push'' y ''pop'') para coger y dejar directamente del final de la lista (lo que sería la parte alta de la pila)
 +
 +=== Añadir un elemento ===
 +
 +<code java>
 +Stack<Libro> pilaLibros = new Stack<>();
 +Libro libro = new Libro(. . .);
 +
 +pilaLibros.push(libro);
 +</code>
 +
 +=== Retirar un elemento de la pila ===
 +
 +<code java>
 +Libro libro = pilaLibros.pop();
 +</code>
 +
 +=== Obtener, sin retirar, el elemento de lo alto de la pila ===
 +
 +<code java>
 +Libro libro = pilaLibros.peek();
 +</code>
 +
 +=== Obtener la posición de un elemento (posicion >= 1) ===
 +
 +<code java>
 +int posicion = pilaLibros.search(libro);
 +</code>
 +
 +=== Comprobar el tamaño de la pila ===
 +
 +<code java>
 +int tamano = pilaLibros.size();
 +</code>
  
 ===== Sets ===== ===== Sets =====
Line 195: Line 270:
 <caption>Colecciones en Java</caption></figure> <caption>Colecciones en Java</caption></figure>
  
 +==== Set ====
 +
 +  * Por definición no acepta elementos duplicados
 +  * No define métodos nuevos, solamente implementa ''Collection'' e impide que existan elementos duplicados
 +
 +==== HashSet ====
 +
 +  * Rendimiento constante para las operaciones más habituales
 +  * No garantiza el orden de los elementos de la colección
 +
 +==== LinkedHashSet ====
 +
 +Mantiene una lista doblemente enlazada por lo que puede obtenerse un iterador con el orden en que los elementos fueron añadidos a la colección
 +
 +==== EnumSet ====
 +
 +Es un Set especializado para enumeraciones
 +• El rendimiento es ligeramente inferior al de HashSet
 +
 +==== TreeSet ====
 +
 +  * Garantiza el orden de los elementos
 +  * Sus elementos se mantienen siempre ordenados de forma natural o por un ''Comparator'' que se proporcione en su constructor
 +  * Su rendimiento es el menor de todos los Sets
 +
 +===== Maps =====
 +
 +Es una colección de elementos que se encuentran mapeados por una clave (parejas clave-valor, key-value, K, V):
 +  * La clave asociada a cada elemento permite recuperarlo
 +  * No se permiten claves duplicadas (se sobrescribe el valor si la clave se vuelve a registrar)
 +
 +<figure>
 +{{ map.png }}
 +<caption>Colecciones Map</caption></figure>
 +
 +==== Interface Map ====
 +
 +  * Define una serie de método que cualquier colección tiene que implementar
 +    * ''void clear()''
 +    * ''boolean containsKey()''
 +    * ''boolean containsValue()''
 +    * ''boolean isEmpty()''
 +    * ''Set<K> keySet()''
 +    * ''V put(K, V)''
 +    * ''V remove(K)''
 +    * ''V replace(K, V)''
 +    * ''int size()''
 +    * ''Collection<V> values()''
 +
 +==== HashMap ====
 +
 +Es un mapa que proporciona rendimiento constante para las operaciones put() y get()
 +
 +==== TreeMap ====
 +
 +Es un mapa ordenado por el orden natural o Comparator que se indique en el constructor
 +
 +==== LinkedHashMap ====
 +
 +  * Mantiene una lista doblemente enlazada
 +  * Es posible obtener un iterador con el orden de inserción de las claves
 +
 +===== Queues =====
 +
 +Define estructuras que pueden ser gestionadas como //FIFO// (First In First Out), lo que se conoce como colas.
 +
 +<figure>
 +{{ map.png }}
 +<caption>Colecciones Map</caption></figure>
 +
 +==== Interfaces Queue/Deque ====
 +
 +Define una serie de método que cualquier cola tiene que implementar
 +  * ''boolean add(e)''
 +  * ''E peek()''
 +  * ''E poll()''
 +
 +Además, la interfaz ''Deque'', que extiende a ''Queue'', y añade elementos para añadir y obtener elementos del inicio y el final:
 +  * ''void addFirst(e)''
 +  * ''void addLast(e)''
 +  * ''E getFirst()''
 +  * ''E getLast()''
 +  * ''E removeFirst()''
 +  * ''E removeLast()''
 +
 +==== ArrayDeque ====
  
 +Representa una cola
  
-===== Queues y Maps =====+==== PriorityQueue ====
  
 +Representa una cola donde con los elementos ordenador de forma natural o según el ''Comparator'' que se le pasa a su constructor
  
 ===== La clase HashMap ===== ===== La clase HashMap =====
Line 246: Line 409:
 <code java> <code java>
 Set<String> losTitulos = libros.keySet(); Set<String> losTitulos = libros.keySet();
-<code java>+</code>
  
 === Obtener el número de elementos del HashMap === === Obtener el número de elementos del HashMap ===
Line 254: Line 417:
 </code> </code>
  
-===== Las Pilas ===== 
- 
-Las Pilas son colecciones de datos donde éstos se colocan //apilándolos// y sólo puede ser retirado el elemento que se encuentra encima de la pila. Siguen el principio [[https://es.wikipedia.org/wiki/Last_in,_first_out|LIFO]] (Last In First Out) donde el último elemento en llegar a la colección es el primero en salir de la misma. 
- 
-=== Añadir un elemento === 
- 
-<code java> 
-Stack<Libro> pilaLibros = new Stack<>(); 
-Libro libro = new Libro(. . .); 
- 
-pilaLibros.push(libro); 
-</code> 
- 
-=== Retirar un elemento de la pila === 
- 
-<code java> 
-Libro libro = pilaLibros.pop(); 
-</code> 
- 
-=== Obtener, sin retirar, el elemento de lo alto de la pila === 
- 
-<code java> 
-Libro libro = pilaLibros.peek(); 
-</code> 
- 
-=== Obtener la posición de un elemento (posicion >= 1) === 
- 
-\begin{lstlisting}[language=java] 
-int posicion = pilaLibros.search(libro); 
-\end{lstlisting} 
- 
-=== Comprobar el tamaño de la pila === 
- 
-<code java> 
-int tamano = pilaLibros.size(); 
-</code> 
  
 ===== Las Colas ===== ===== Las Colas =====
Line 297: Line 424:
 En Java, la clase ''LinkedList'' implementa el interfaz ''Queue'' y proporciona una cola FIFO a través de los métodos ''add(Object)'' y ''poll()'' para retirar el primer elemento. En Java, la clase ''LinkedList'' implementa el interfaz ''Queue'' y proporciona una cola FIFO a través de los métodos ''add(Object)'' y ''poll()'' para retirar el primer elemento.
  
-----+====== Ejercicios ====== 
 + 
 +{{ ejercicio.png}}
  
-====== Ejemplos ======+  - Elige el tipo de colección más adecuado para cada caso: 
 +    - Se quiere almacenar un listado de productos de una tienda online al recuperarlos de una base de datos 
 +    - Ahora tenemos que tener en cuenta que el usuario puede modificar los criterios de ordenación del listado anterior 
 +    - Un usuario va añadiendo productos a un carrito de la compra que más adelante tendrá que validar 
 +    - Un usuario añade varias direcciones de entrega asociadas a su perfil 
 +    - Recuperamos de la base de datos la información del perfil de un usuario (con sus múltiples direcciones de entrega)
  
 ---- ----
  
 (c) 2019-{{date>%Y}} Santiago Faci (c) 2019-{{date>%Y}} Santiago Faci
apuntes/colecciones.1685904389.txt.gz · Last modified: 2023/06/04 18:46 by Santiago Faci