SlideShare a Scribd company logo
1 of 55
Java Collection Framework
lo que todo Java Dev debe conocer
Rafael Gutiérrez, @abaddon_gtz
JVM_MX, Julio 2023
Java Collection Framework
● Antes solo había Vector y Stack
● Agregado a Java en la versión 1.2 (en 1998)
“Una arquitectura unificada para representar y manipular colecciones,
permitiendo manipular las colecciones independientemente de los
detalles de implementación”
Java Collection Framework - Interfaces*
*Vista simplificada
java.util.Collection
Collection
● La raíz de la jerarquía de colecciones
● Representa un grupo de objetos (elementos)
● Debe ser usada cuando se desee pasar colecciones de objetos a otros objetos
y se busque “la máxima generalidad”
○ Por convención las implementaciones de colecciones tienen un constructor que recibe
Collection
Recorrer una colección
Otras operaciones de Collection
● size(), isEmpty()
● contains(obj), containsAll(otherCollection)
● add(item), addAll(otherCollection)
● remove(item), removeAll(otherCollection)
● removeIf(somePredicate)
● retainAll(otherCollection)
● clear()
● stream(), parallelStream() // pero por supuesto! Y esto es tema aparte!
● Y mas :D
java.util.List
List
● Colección que mantiene el orden de inserción [ordered] (también conocida
como Secuencia)
● Control preciso de dónde insertar un elemento en la lista
● Se puede acceder a sus elementos por índice
● Permite duplicados
● Permite nulls
Crear una lista
Recorrer una lista - for por índice
También puedes usar for-each e Iterator! (mas facil)
Recorrer una lista - ListIterator
Buscar el índice de un elemento
Ordenar [sorting] una lista de enteros
Ordenar [sorting] una lista de objetos
Ordenar [sorting] una lista de objetos “comparables”
Ordenar [sorting] una lista de objetos con Comparator
List desde Java 21
● SequencedCollection
○ Una colección con un orden de aparición [encounter-order]
bien definido
● addFirst(item), addLast(item)
● getFirst(), getLast()
● removeFirst(), removeLast()
● reversed()
ArrayList
● Implementación de List con arreglos que se ajustan de tamaño [resizable-
array]
● Tiene una capacidad que aumenta automáticamente al llenarse el arreglo
● Se puede especificar la capacidad via el constructor
● No es sincronizada (no es Thread Safe)
○ Collections.synchronizedList(new ArrayList(...))
● Iteradores creados usando iterator() o listIterator() son “fail-fast”. Es decir,
si la lista es modificada después de crear el iterador un error
ConcurrentModificationException es lanzado
Crear un ArrayList simple
emojis = [😀, 😁, 😂]
CopyOnWriteArrayList
● Variante Thread-safe de ArrayList
● Todos los métodos que “modifican” la lista están implementados para crear
una copia nueva del arreglo interno
● Los Iterator creados con iterator() o listIterator() crean una “foto” [snapshot]
del arreglo interno y así se evita el error ConcurrentModificationException
● Es costoso en recursos, usalo con cuidado y bajo tu propio riesgo
Iterator snapshot con CopyOnWriteArrayList
LinkedList
● Implementación de List usando una lista doblemente ligada
● No es sincronizada (no es Thread-safe)
○ Collections.synchronizedList(new LinkedList(...))
● Similar a ArrayList los Iterator creador por iterator() or listIterator() son
“fail-fast”
● No es recomendable su uso
○ ArrayDeque es mejor opción
java.util.Set
Set
● Colección que no permite duplicados
● Solo un elemento null
○ Algunas implementaciones no permiten null
● No existe un par de elementos e1 y e2 donde e1.equals(e2)
Crear un Set
numbers = [4, 3, 2, 1, 5]
HashSet
● Implementación de Set donde internamente se tiene un hash table (instancia
de HashMap)
● No hace garantías en cuanto al orden de iteración
● Permite un elemento null
● Rendimiento constante en tiempo para operaciones básicas como add,
remove, contains y size
○ Asumiendo the la función hash dispersa uniformemente los elementos
● No es sincronizada (no es Thread-safe)
○ Collections.synchronizedSet(new HashSet(...))
● Iteradores creados por esta clase son “fail-fast”
TreeSet
● Implementación de Set donde los elementos son ordenados [sorted] por su
orden natural o usando un Comparator
● log(n) garantizado para operaciones como add, remove y contains
○ Almacena sus elementos internamente un árbol “red-black”
● Implementaciones de Comparable y Comparator usados para el
ordenamiento deben ser “consistentes con equals”
● No es sincronizada (no es Thread-safe)
○ Collections.synchronizedSet(new TreeSet(...))
Algunos metodos de TreeSet
LinkedHashSet
● Implementación de Set donde internamente se tiene un Hash Table y una
lista ligada
● Tiene un orden de aparición bien definido de sus elementos
● Provee rendimiento constante para las operaciones add, contains and
remove
○ De forma similar a HashSet asumiendo que la función hash dispersa uniformemente los
elementos
● Iterar los elementos tiene mejor rendimiento que en un HashSet
● No es sincronizada (no es Thread-safe)
○ Collections.synchronizedSet(new LinkedHashSet(...))
CopyOnWriteArraySet
● Implementacion de Set que usa internamente CopyOnWriteArrayList
● Comparte las mismas propiedades de un CopyOnWriteArrayList
Set desde Java 21
● SequencedSet
○ Un Set con un orden de aparición [encounter-order] bien
definido
● reversed
Porque SequencedCollections?
https://openjdk.org/jeps/431
Motivation
Java’s collections framework lacks a collection type that represents a sequence
of elements with a defined encounter order. It also lacks a uniform set of
operations that apply across such collections. These gaps have been a repeated
source of problems and complaints.
java.util.Map
Map
● Diccionario de datos
● Mapea Llaves [Keys] a valores [values]
● No permite llaves duplicadas y cada llave mapea por lo menos a un valor
● Provee tres vistas de colecciones: un Set llaves, una Collection de valores y
un Set de mapeos llave-valor [Entries]
Crear un Map
Algunos metodos para agregar elementos a un Map
Metodo compute
HashMap
● Implementación de Map usando Hash Tables
● Permite llaves y valores null
● No hay garantías en cuanto al orden de aparición
● Provee rendimiento constante para operaciones get y put
○ De nuevo, asumiendo que la función hash dispersa uniformemente las llaves
● No es sincronizada (no es Thread-safe)
○ Collections.synchronizedMap(new HashMap(...))
TreeMap
● Implementación de Map donde las llaves están ordenadas por su orden
natural o por el Comparator especificado en el constructor
● El comportamiento y rendimiento es análogo a un TreeSet
Algunos metodos de TreeMap
LinkedHashMap
● Implementación de Map usando Hash Tables y una lista ligada.
● El comportamiento y rendimiento es análogo a un LinkedHashSet
java.util.Queue
Queue (kyu)
● Una colección diseñada para almacenar elementos antes de ser “procesados”
● Tiene las mismas operaciones que Collection pero provee adicionales para
insertar, extraer, inspeccionar. Estas operaciones pueden tirar una
excepción o regresar un valor especial (null o false)
● Tipicamente son FIFO (first-in-first-out)
○ PriorityQueue no funciona así
PriorityQueue
● Queue con prioridad ilimitada [unbounded] basado en un Priority Heap
● Los elementos son ordenados de acuerdo a su orden natural o por el
Comparator especificado en el constructor
● No permite nulls
● La cabeza del Queue [head] es el elemento menor según su ordenamiento
● No sincronizada (no Thread-safe)
○ PriorityBlockingQueue
PriorityQueue ejemplo
java.util.Deque
Deque (deck)
● Colección que soporta insertar y remover elementos al principio y al final
● Deque es “double ended queue”
● Similar a Queue sus métodos pueden tirar excepción o regresar un valor
especial (null o false)
● Puede ser usados para comportamientos FIFO (first-in-first-out) o LIFO
(last-in-first-out)
Metodos de Deque
Deque como Queue (LIFO)
Deque como Stack (LIFO)
ArrayDeque
● Implementación de Deque basada en un arreglo que se ajusta de tamaño
[resizable-array]
● No Thread-safe
● Iterators creados de ArrayDeque son fail-fast
● No nulls
● Mejor desempeño que la clase Stack cuando se usa como una stack
● Mejor desempeño que LinkedList cuando se usa como queue
Y hay mas!
Java Collection Framework - Interfaces
Gracias!

More Related Content

What's hot

Terraform modules restructured
Terraform modules restructuredTerraform modules restructured
Terraform modules restructuredAmi Mahloof
 
Java11 New Features
Java11 New FeaturesJava11 New Features
Java11 New FeaturesHaim Michael
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8Helder da Rocha
 
Logging, Serilog, Structured Logging, Seq
Logging, Serilog, Structured Logging, SeqLogging, Serilog, Structured Logging, Seq
Logging, Serilog, Structured Logging, SeqDoruk Uluçay
 
Selenium Basics Tutorial
Selenium Basics TutorialSelenium Basics Tutorial
Selenium Basics TutorialClever Moe
 
Spring Framework - Spring Security
Spring Framework - Spring SecuritySpring Framework - Spring Security
Spring Framework - Spring SecurityDzmitry Naskou
 
JMockit Framework Overview
JMockit Framework OverviewJMockit Framework Overview
JMockit Framework OverviewMario Peshev
 
Mocking APIs Collaboratively with Postman
Mocking APIs Collaboratively with PostmanMocking APIs Collaboratively with Postman
Mocking APIs Collaboratively with PostmanNordic APIs
 
2장. Runtime Data Areas
2장. Runtime Data Areas2장. Runtime Data Areas
2장. Runtime Data Areas김 한도
 
Be Smart, Constrain Your Types to Free Your Brain!
Be Smart, Constrain Your Types to Free Your Brain!Be Smart, Constrain Your Types to Free Your Brain!
Be Smart, Constrain Your Types to Free Your Brain!Jorge Vásquez
 
Oracle Advanced SQL and Analytic Functions
Oracle Advanced SQL and Analytic FunctionsOracle Advanced SQL and Analytic Functions
Oracle Advanced SQL and Analytic FunctionsZohar Elkayam
 
Triggers o disparadores
Triggers o disparadoresTriggers o disparadores
Triggers o disparadoresPablo Jose
 

What's hot (20)

Terraform modules restructured
Terraform modules restructuredTerraform modules restructured
Terraform modules restructured
 
Spring Core
Spring CoreSpring Core
Spring Core
 
Java11 New Features
Java11 New FeaturesJava11 New Features
Java11 New Features
 
Java logging
Java loggingJava logging
Java logging
 
Lombok
LombokLombok
Lombok
 
Generics
GenericsGenerics
Generics
 
Maven
MavenMaven
Maven
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8
 
TestNG Framework
TestNG Framework TestNG Framework
TestNG Framework
 
Logging, Serilog, Structured Logging, Seq
Logging, Serilog, Structured Logging, SeqLogging, Serilog, Structured Logging, Seq
Logging, Serilog, Structured Logging, Seq
 
Selenium Basics Tutorial
Selenium Basics TutorialSelenium Basics Tutorial
Selenium Basics Tutorial
 
Spring Framework - Spring Security
Spring Framework - Spring SecuritySpring Framework - Spring Security
Spring Framework - Spring Security
 
JMockit Framework Overview
JMockit Framework OverviewJMockit Framework Overview
JMockit Framework Overview
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Mocking APIs Collaboratively with Postman
Mocking APIs Collaboratively with PostmanMocking APIs Collaboratively with Postman
Mocking APIs Collaboratively with Postman
 
Spring boot
Spring bootSpring boot
Spring boot
 
2장. Runtime Data Areas
2장. Runtime Data Areas2장. Runtime Data Areas
2장. Runtime Data Areas
 
Be Smart, Constrain Your Types to Free Your Brain!
Be Smart, Constrain Your Types to Free Your Brain!Be Smart, Constrain Your Types to Free Your Brain!
Be Smart, Constrain Your Types to Free Your Brain!
 
Oracle Advanced SQL and Analytic Functions
Oracle Advanced SQL and Analytic FunctionsOracle Advanced SQL and Analytic Functions
Oracle Advanced SQL and Analytic Functions
 
Triggers o disparadores
Triggers o disparadoresTriggers o disparadores
Triggers o disparadores
 

Similar to Java Collection Framework: lo que todo Java Dev debe conocer

Jyoc java-cap11 colecciones
Jyoc java-cap11 coleccionesJyoc java-cap11 colecciones
Jyoc java-cap11 coleccionesJyoc X
 
Tema 6 colecciones por gio
Tema 6   colecciones por gioTema 6   colecciones por gio
Tema 6 colecciones por gioRobert Wolf
 
[ES] Colecciones y estructura de iteracion
[ES] Colecciones y estructura de iteracion[ES] Colecciones y estructura de iteracion
[ES] Colecciones y estructura de iteracionEudris Cabrera
 
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)Oscar V
 
DAW - Estructuras de almacenamiento
DAW - Estructuras de almacenamientoDAW - Estructuras de almacenamiento
DAW - Estructuras de almacenamientovay82
 
Colecciones en java
Colecciones en javaColecciones en java
Colecciones en javaMaîck Ddz
 
Programación 3: Vector, stack, enumearator, iterator, listiterator en Java
Programación 3: Vector, stack, enumearator, iterator, listiterator en JavaProgramación 3: Vector, stack, enumearator, iterator, listiterator en Java
Programación 3: Vector, stack, enumearator, iterator, listiterator en JavaAngel Vázquez Patiño
 
2 2 2 Arraylist Y Operadores
2 2 2 Arraylist Y Operadores2 2 2 Arraylist Y Operadores
2 2 2 Arraylist Y OperadoresUVM
 
Mapas y Diccionarios - Colecciones Parametrizadas
Mapas y Diccionarios - Colecciones ParametrizadasMapas y Diccionarios - Colecciones Parametrizadas
Mapas y Diccionarios - Colecciones ParametrizadasChristian Collaguazo Malla
 
AWT- JAVA
AWT- JAVAAWT- JAVA
AWT- JAVAale8819
 
abstract window tool kit
abstract window tool kitabstract window tool kit
abstract window tool kitjent46
 
Entorno grafico en Java
Entorno grafico en JavaEntorno grafico en Java
Entorno grafico en JavaRonny Parra
 
Entorno gráfico en Java
Entorno gráfico en JavaEntorno gráfico en Java
Entorno gráfico en JavaRonny Parra
 

Similar to Java Collection Framework: lo que todo Java Dev debe conocer (20)

Colecciones
ColeccionesColecciones
Colecciones
 
Colecciones en java
Colecciones en javaColecciones en java
Colecciones en java
 
colecciones en java
colecciones en javacolecciones en java
colecciones en java
 
Jyoc java-cap11 colecciones
Jyoc java-cap11 coleccionesJyoc java-cap11 colecciones
Jyoc java-cap11 colecciones
 
Tema 6 colecciones por gio
Tema 6   colecciones por gioTema 6   colecciones por gio
Tema 6 colecciones por gio
 
JAVA ORIENTADO A OBJETOS - COLECCIONES
JAVA ORIENTADO A OBJETOS - COLECCIONESJAVA ORIENTADO A OBJETOS - COLECCIONES
JAVA ORIENTADO A OBJETOS - COLECCIONES
 
[ES] Colecciones y estructura de iteracion
[ES] Colecciones y estructura de iteracion[ES] Colecciones y estructura de iteracion
[ES] Colecciones y estructura de iteracion
 
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)
 
Programación 3: colecciones Java
Programación 3: colecciones JavaProgramación 3: colecciones Java
Programación 3: colecciones Java
 
DAW - Estructuras de almacenamiento
DAW - Estructuras de almacenamientoDAW - Estructuras de almacenamiento
DAW - Estructuras de almacenamiento
 
4_colecciones.ppt
4_colecciones.ppt4_colecciones.ppt
4_colecciones.ppt
 
Colecciones en java
Colecciones en javaColecciones en java
Colecciones en java
 
Tema6
Tema6Tema6
Tema6
 
Programación 3: Vector, stack, enumearator, iterator, listiterator en Java
Programación 3: Vector, stack, enumearator, iterator, listiterator en JavaProgramación 3: Vector, stack, enumearator, iterator, listiterator en Java
Programación 3: Vector, stack, enumearator, iterator, listiterator en Java
 
2 2 2 Arraylist Y Operadores
2 2 2 Arraylist Y Operadores2 2 2 Arraylist Y Operadores
2 2 2 Arraylist Y Operadores
 
Mapas y Diccionarios - Colecciones Parametrizadas
Mapas y Diccionarios - Colecciones ParametrizadasMapas y Diccionarios - Colecciones Parametrizadas
Mapas y Diccionarios - Colecciones Parametrizadas
 
AWT- JAVA
AWT- JAVAAWT- JAVA
AWT- JAVA
 
abstract window tool kit
abstract window tool kitabstract window tool kit
abstract window tool kit
 
Entorno grafico en Java
Entorno grafico en JavaEntorno grafico en Java
Entorno grafico en Java
 
Entorno gráfico en Java
Entorno gráfico en JavaEntorno gráfico en Java
Entorno gráfico en Java
 

More from Rafael Antonio Gutiérrez Turullols (7)

De Threads a CompletableFutures
De Threads a CompletableFuturesDe Threads a CompletableFutures
De Threads a CompletableFutures
 
Building a Slack Bot Workshop @ Nearsoft OctoberTalks 2017
Building a Slack Bot Workshop @ Nearsoft OctoberTalks 2017Building a Slack Bot Workshop @ Nearsoft OctoberTalks 2017
Building a Slack Bot Workshop @ Nearsoft OctoberTalks 2017
 
Una gota de elixir 2017
Una gota de elixir   2017Una gota de elixir   2017
Una gota de elixir 2017
 
Elixir concurrency 101
Elixir concurrency 101Elixir concurrency 101
Elixir concurrency 101
 
Test doubles and EasyMock
Test doubles and EasyMockTest doubles and EasyMock
Test doubles and EasyMock
 
Capa de persistencia con ecto
Capa de persistencia con ectoCapa de persistencia con ecto
Capa de persistencia con ecto
 
Dando saltos con Spring Roo
Dando saltos con Spring RooDando saltos con Spring Roo
Dando saltos con Spring Roo
 

Recently uploaded

Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfmasogeis
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Opentix
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionarmando_cardenas
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOSelenaCoronadoHuaman
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...ITeC Instituto Tecnología Construcción
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3AlexysCaytanoMelndez1
 

Recently uploaded (7)

Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdf
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacion
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
 

Java Collection Framework: lo que todo Java Dev debe conocer

  • 1. Java Collection Framework lo que todo Java Dev debe conocer Rafael Gutiérrez, @abaddon_gtz JVM_MX, Julio 2023
  • 2. Java Collection Framework ● Antes solo había Vector y Stack ● Agregado a Java en la versión 1.2 (en 1998) “Una arquitectura unificada para representar y manipular colecciones, permitiendo manipular las colecciones independientemente de los detalles de implementación”
  • 3. Java Collection Framework - Interfaces* *Vista simplificada
  • 5. Collection ● La raíz de la jerarquía de colecciones ● Representa un grupo de objetos (elementos) ● Debe ser usada cuando se desee pasar colecciones de objetos a otros objetos y se busque “la máxima generalidad” ○ Por convención las implementaciones de colecciones tienen un constructor que recibe Collection
  • 7. Otras operaciones de Collection ● size(), isEmpty() ● contains(obj), containsAll(otherCollection) ● add(item), addAll(otherCollection) ● remove(item), removeAll(otherCollection) ● removeIf(somePredicate) ● retainAll(otherCollection) ● clear() ● stream(), parallelStream() // pero por supuesto! Y esto es tema aparte! ● Y mas :D
  • 9. List ● Colección que mantiene el orden de inserción [ordered] (también conocida como Secuencia) ● Control preciso de dónde insertar un elemento en la lista ● Se puede acceder a sus elementos por índice ● Permite duplicados ● Permite nulls
  • 11. Recorrer una lista - for por índice También puedes usar for-each e Iterator! (mas facil)
  • 12. Recorrer una lista - ListIterator
  • 13. Buscar el índice de un elemento
  • 14. Ordenar [sorting] una lista de enteros
  • 15. Ordenar [sorting] una lista de objetos
  • 16. Ordenar [sorting] una lista de objetos “comparables”
  • 17. Ordenar [sorting] una lista de objetos con Comparator
  • 18. List desde Java 21 ● SequencedCollection ○ Una colección con un orden de aparición [encounter-order] bien definido ● addFirst(item), addLast(item) ● getFirst(), getLast() ● removeFirst(), removeLast() ● reversed()
  • 19. ArrayList ● Implementación de List con arreglos que se ajustan de tamaño [resizable- array] ● Tiene una capacidad que aumenta automáticamente al llenarse el arreglo ● Se puede especificar la capacidad via el constructor ● No es sincronizada (no es Thread Safe) ○ Collections.synchronizedList(new ArrayList(...)) ● Iteradores creados usando iterator() o listIterator() son “fail-fast”. Es decir, si la lista es modificada después de crear el iterador un error ConcurrentModificationException es lanzado
  • 20. Crear un ArrayList simple emojis = [😀, 😁, 😂]
  • 21. CopyOnWriteArrayList ● Variante Thread-safe de ArrayList ● Todos los métodos que “modifican” la lista están implementados para crear una copia nueva del arreglo interno ● Los Iterator creados con iterator() o listIterator() crean una “foto” [snapshot] del arreglo interno y así se evita el error ConcurrentModificationException ● Es costoso en recursos, usalo con cuidado y bajo tu propio riesgo
  • 22. Iterator snapshot con CopyOnWriteArrayList
  • 23. LinkedList ● Implementación de List usando una lista doblemente ligada ● No es sincronizada (no es Thread-safe) ○ Collections.synchronizedList(new LinkedList(...)) ● Similar a ArrayList los Iterator creador por iterator() or listIterator() son “fail-fast” ● No es recomendable su uso ○ ArrayDeque es mejor opción
  • 25. Set ● Colección que no permite duplicados ● Solo un elemento null ○ Algunas implementaciones no permiten null ● No existe un par de elementos e1 y e2 donde e1.equals(e2)
  • 26. Crear un Set numbers = [4, 3, 2, 1, 5]
  • 27. HashSet ● Implementación de Set donde internamente se tiene un hash table (instancia de HashMap) ● No hace garantías en cuanto al orden de iteración ● Permite un elemento null ● Rendimiento constante en tiempo para operaciones básicas como add, remove, contains y size ○ Asumiendo the la función hash dispersa uniformemente los elementos ● No es sincronizada (no es Thread-safe) ○ Collections.synchronizedSet(new HashSet(...)) ● Iteradores creados por esta clase son “fail-fast”
  • 28. TreeSet ● Implementación de Set donde los elementos son ordenados [sorted] por su orden natural o usando un Comparator ● log(n) garantizado para operaciones como add, remove y contains ○ Almacena sus elementos internamente un árbol “red-black” ● Implementaciones de Comparable y Comparator usados para el ordenamiento deben ser “consistentes con equals” ● No es sincronizada (no es Thread-safe) ○ Collections.synchronizedSet(new TreeSet(...))
  • 30. LinkedHashSet ● Implementación de Set donde internamente se tiene un Hash Table y una lista ligada ● Tiene un orden de aparición bien definido de sus elementos ● Provee rendimiento constante para las operaciones add, contains and remove ○ De forma similar a HashSet asumiendo que la función hash dispersa uniformemente los elementos ● Iterar los elementos tiene mejor rendimiento que en un HashSet ● No es sincronizada (no es Thread-safe) ○ Collections.synchronizedSet(new LinkedHashSet(...))
  • 31. CopyOnWriteArraySet ● Implementacion de Set que usa internamente CopyOnWriteArrayList ● Comparte las mismas propiedades de un CopyOnWriteArrayList
  • 32. Set desde Java 21 ● SequencedSet ○ Un Set con un orden de aparición [encounter-order] bien definido ● reversed
  • 33. Porque SequencedCollections? https://openjdk.org/jeps/431 Motivation Java’s collections framework lacks a collection type that represents a sequence of elements with a defined encounter order. It also lacks a uniform set of operations that apply across such collections. These gaps have been a repeated source of problems and complaints.
  • 35. Map ● Diccionario de datos ● Mapea Llaves [Keys] a valores [values] ● No permite llaves duplicadas y cada llave mapea por lo menos a un valor ● Provee tres vistas de colecciones: un Set llaves, una Collection de valores y un Set de mapeos llave-valor [Entries]
  • 37. Algunos metodos para agregar elementos a un Map
  • 39. HashMap ● Implementación de Map usando Hash Tables ● Permite llaves y valores null ● No hay garantías en cuanto al orden de aparición ● Provee rendimiento constante para operaciones get y put ○ De nuevo, asumiendo que la función hash dispersa uniformemente las llaves ● No es sincronizada (no es Thread-safe) ○ Collections.synchronizedMap(new HashMap(...))
  • 40. TreeMap ● Implementación de Map donde las llaves están ordenadas por su orden natural o por el Comparator especificado en el constructor ● El comportamiento y rendimiento es análogo a un TreeSet
  • 42. LinkedHashMap ● Implementación de Map usando Hash Tables y una lista ligada. ● El comportamiento y rendimiento es análogo a un LinkedHashSet
  • 44. Queue (kyu) ● Una colección diseñada para almacenar elementos antes de ser “procesados” ● Tiene las mismas operaciones que Collection pero provee adicionales para insertar, extraer, inspeccionar. Estas operaciones pueden tirar una excepción o regresar un valor especial (null o false) ● Tipicamente son FIFO (first-in-first-out) ○ PriorityQueue no funciona así
  • 45. PriorityQueue ● Queue con prioridad ilimitada [unbounded] basado en un Priority Heap ● Los elementos son ordenados de acuerdo a su orden natural o por el Comparator especificado en el constructor ● No permite nulls ● La cabeza del Queue [head] es el elemento menor según su ordenamiento ● No sincronizada (no Thread-safe) ○ PriorityBlockingQueue
  • 48. Deque (deck) ● Colección que soporta insertar y remover elementos al principio y al final ● Deque es “double ended queue” ● Similar a Queue sus métodos pueden tirar excepción o regresar un valor especial (null o false) ● Puede ser usados para comportamientos FIFO (first-in-first-out) o LIFO (last-in-first-out)
  • 52. ArrayDeque ● Implementación de Deque basada en un arreglo que se ajusta de tamaño [resizable-array] ● No Thread-safe ● Iterators creados de ArrayDeque son fail-fast ● No nulls ● Mejor desempeño que la clase Stack cuando se usa como una stack ● Mejor desempeño que LinkedList cuando se usa como queue