Bienvenidos.
Ahora sí que comenzamos con el lápiz de clusión Villada, pero de forma formal, ya hemos trabajado
en ejemplos en repository, con las listas, con el ArrayList y su interfaz.
Les hemos agregado elemento, hemos modificado, eliminado, ordenados.
En fin, hemos visto un montón de cosas.
Pero la idea ahora es aterrizar y presentar de forma un poco más formal el API de clusión de Java,
que también se le conoce como estructura de datos, porque no solamente tenemos el ArrayList y las listas.
También tenemos otro tipos de interfaces y clases y vamos a utilizar una u otra según sea el caso,
según nuestro contexto y lo que necesitemos desarrollar implementar.
Bien, comencemos entonces.
Bueno, qué es lo que son las colecciones?
Bueno, básicamente para agrupar o almacenar objetos y tiene dos grandes tipos.
Por un lado tenemos los colectaron y los map, y dentro de los colectaron o colecciones también hay
dos tipos principales el list y los.
Y por otro lado, los map o mapas.
Básicamente son diccionarios para almacenar, guardar objetos asociado a un nombre, a una llave.
Bien, entonces tipos de agrupaciones API clusión de Java bastante amplia para agrupar objetos consta
de tres tipos como vimos list y set que parte del colectaron y por otro lado tenemos los map y siempre
bueno, vamos a aplicar uno u otro según alguna regla que necesitemos implementar.
Entonces, bueno, antes de comenzar en cualquiera de los tipos de lápiz de colección, no tenemos que
preocuparnos del tamaño, no como en los arreglos, ya que crecen de forma automática a medida que agregamos
elemento y alcansa por ejemplo, la cantidad por defecto que tiene automáticamente se incrementa.
Bien, entonces continuemos.
Eso es lo más importante.
Comencemos con los list.
Las listas tienen la característica principal es ordenada.
Por lo tanto, a medida que agregamos elemento van quedando ordenados estos elementos en esa secuencia.
Entonces asegura que los elementos siempre va a mantener una secuencia concreta, pero también se le
puede aplicar un ordenamiento más específico, por ejemplo, invocando el método Short, pero siempre
cuando implementen algún contrato.
La interfaz comparable.
Es decir que estos objetos que tenemos almacenado en esta lista implementan esta interfaz y tengan algún
ordenamiento en concreto, utilizando por ejemplo el compartir, es decir, ordenar por algún atributo,
cosa que hemos visto o bien utilizando la interfaz comparador que un poco más flexible ya nos permite
no solamente ordenar por un atributo específico, sino según algún parámetro, podría ordenar por algún
atributo u otro.
También lo vimos en el ejemplo repository.
Entonces las listas son ordenadas, se pueden ordenar y también.
Otra característica es que permite almacenar objetos duplicados y esto también lo vimos y lo corregimos,
lo manejamos con excepciones.
En el ejemplo anterior, mientras que los set, no lo sé, no permiten elementos duplicados.
Un tema importante siempre son únicos y tampoco mantienen un orden en los elementos.
Por lo tanto, los sets son mucho más simple, pero también estrictos.
Por otro lado, los mapas es muy similar al concepto de arreglos asociativo.
Asociar los elementos que guardamos a un identificador o nombre también se le conoce como llaves.
No se.
Por eso se basa en parejas de QY and Valium, llaves y valor.
A continuación vamos a ver un diagrama de clases de lápiz de colección DILLA, pero resumido primero
tenemos dos grandes tipo Collection y Map, ambas interfaces.
Luego por cada una.
En el colegio tenemos grandes tipos, las listas y los sets.
Vimos alguna diferencia.
Vimos que las listas son ordenadas.
Además, permiten duplicados, mientras que los set no son ordenadas y no permite duplicados.
Son únicos, pero en cada una tenemos también distintas implementaciones concretas.
Ya estamos trabajando con clases concreta que implementan, por ejemplo, la interfaz list y acá tenemos
tres, básicamente por el lado de las listas.
El ArrayList Linked List, que es una implementación de una lista enlazada y los vectores partamos primero.
ArrayList es una lista volcada en un arreglo.
Es decir, por detrás de escena traja con un arreglo con un array con un tamaño inicial de 10 elementos
y cuando alcanza esta capacidad, automáticamente se incrementa en un 50 por ciento, es decir, en
1.5 de forma automática y lo que hace llega.
Hay que tener cuidado porque lo que hace es crear una copia del arreglo utilizando Array Coppi con un
50 porciento capacidad más.
Y por supuesto, copia todos los elementos del arreglo anterior a este nuevo arreglo con mayor capacidad.
Entonces, como traja con un arreglo, tienes sus características, su pro y su contra.
Por ejemplo, los pro o ventajas es que da acceso muy rápido, por ejemplo de lectura para acceder a
un elemento claro simplemente a través del índice.
Pero todo lo que sea manipulación de los objetos.
Por ejemplo, eliminar un objeto en cualquier parte de la colección o en medio de la colección o si
quiero agregar un elemento al medio ambiente.
La colección ahí tiene una deficiencia o en contra.
El tema del rendimiento tiene que pasar.
Los elementos hacia un lado, colocar este nuevo objeto sin dejar huecos, sin dejar índices vacíos.
Lo mismo que vimos en la sección de arreglo cuando queríamos agregar un elemento en la mitad o entre
medio del arreglo.
Ahí tenemos que desplazar lo mismo cuando queremos eliminar, por ejemplo, un elemento y no dejar huecos.
Lo mismo se elimina, pero también hay que desplazar los elementos.
Y aparte hay que ordenar porque son listas, ordenada.
Entonces, cada manipulación, cada cambio que hagamos de agregar elementos en medio de la lista o eliminar
elementos va a tener un costo importante en rendimiento.
A diferencia del linked list olitas enlazada que ese tipo operaciones de manipulación de objetos de
elemento para agregar en medio de la lista o para eliminar son muy rápidas, ya que lo hace a través
no de arreglos, sino de una lista enlazada por detrás de escena.
Trabaja con nodos y cada uno va a guardar un elemento.
Un objeto va a tener una referencia hacia adelante con el siguiente y hacia atrás se fijan.
Entonces al final forma una secuencia de elementos que están enlazados unos con otros y podemos recorrer
hacia adelante, por ejemplo next y también hacia atrás con previos o anterior.
Entonces, por detrás de escena, por debajo, en vez de usar un arreglo, trabaja con listas enlazadas
o mejor dicho, con listas doblemente enlazadas y no tiene ningún costo manipulación, pero si tiene
un costo para acceder a elementos de forma aleatoria o alguna posición de esta secuencia es más lento.
Pero todo lo que sea iteración o secuencia para iterar una red list o para iterar un en list es rendimiento
constante.
Funciona perfecto, es súper rápido y para agregar elementos también es rápido.
Si quiero agregar un elemento Perojo agregar elemento en el caso del array list siempre agrega al final
de la lista.
Entonces segregamos al final.
Es rapio, no hay ningún problema.
El problema es cuando queremos agregar al medio de la lista linked list.
Obviamente es rapio agregar elemento en cualquier parte.
Otra ventaja del Henkel List o lista enlazada que nos permite implementar pilas y colas.
Es decir, podemos trabajar y manipular elementos no solamente al medio de la colección, sino también
al principio y al final.
Es decir, podemos agregar elementos al principio, agregar elementos al final, leer elementos al principio,
leer elementos al final.
Bueno, todo lo que sea pila y cola es rápido.
Se puede obtener o acceder a un elemento al comienzo o el último elemento sin ningún problema.
Bastante rápido.
El problema es para obtener o acceder al medio de forma aleatoria.
Otra característica Liked List es eliminar elementos también al principio o al final.
También podemos extraer elementos al principio y al final.
La diferencia de extraer versus obtener que extraer simplemente obtiene el elemento, pero también lo
elimina.
Es decir, lo extrae.
Lo quita.
Lo obtenemos, lo sacamos y lo podemos guardar en una variable.
Pero luego desaparece de la lista.
Se fijan, entonces eligen list, todo lo que sea manipulación e ideal.
Y también para trabajar con pilas y colas de una lista.
Mientras que la red list solamente para agregar elementos al final de la lista para iterar y para acceder
a información con el Wyeth, veamos el vector.
El vector final es muy parecido al ArrayList porque por detrás de escena también trabaja con un arreglo
de diferencias que sincronizado un ArrayList no es sincronizado.
Un link list tampoco es sincronizado.
Entonces solamente vamos a utilizar vectores cuando queremos trabajar, por ejemplo con concurrencia,
con varios hilos o subproceso que acceden a este recurso, a este vector de forma segura, de forma
protegida.
Es decir, que cada proceso acceda de a uno a la vez.
Entonces su contenido, sus elementos, están protegido de otros hilos.
Siempre se accede de un hilo a la vez.
A diferencia de lo ArrayList de los linked list y en general de todos, y es un tema que tener en cuenta
de que siempre el vector va a tener un costo de rendimiento extra versus los demás por lo mismo, porque
tienen que empezar a sincronizar los accesos a los métodos.
Ahora esta forma.
Igualmente se puede sincronizar los demás.
Por ejemplo, una red list sin ningún problema utilizando la clase Collections y el método estático
sincronice set list o sincronizar lista y pasamos la red list.
Eso sería otra forma utilizando una clase Halpert de forma externa.
Otra característica de los list, por ejemplo.
Bueno, esto se aplica para cualquiera ArrayList.
Linked List utiliza el método equals para comparar los objetos.
Por ejemplo, para hacerse un objeto existe en la colección con el método contains.
Se acuerdan?
Eso lo vimos.
O bien para eliminar un objeto a través de su instancia con el método Remove Remove y pasamos el objeto
entonces a través del equals, lo que hace comparar si existe algún objeto que tengan por ejemplo el
mismo Heidy.
Bueno, depende lo que tengamos implementado en el método y cuál es, pero generalmente por el Heidy
o por nombre o por instancia también.
Bien, ahora veamos los set.
Ya vimos que la diferencia entre un list y un set que set no es ordenado y no permite duplicados en
implementaciones tenemos tres tipos tenemos el Asset, el Trecet y el link.
Ratchett Cuáles serían las diferencias?
Por ejemplo, el jazz cassette no es ordenado.
Los elementos se agregan con el método ADB, pero no mantiene ningún orden, ni siquiera de inserción,
no asegura ningún orden en absoluto.
Y por supuesto, al ser un set, no permite duplicado.
El jazz set es la implementación más típica.
Es decir, el lema habitual que vamos a utilizar en el día a día es como el caballo de batalla de los.
El Trichet, a diferencia, es ordenado.
Podríamos decir que muy parecido a un list@, porque es ordenado, pero no permite duplicados.
Eso sí, todos los elementos tienen que ser únicos.
Ahora, cuál sería la diferencia entre un jazzed y un Tricel?
Bueno, ya sabemos que el Trecet es ordenado y también podemos implementar un comparador, un comparable
para dar algún algoritmo o personalizar el ordenamiento, pero por defecto se ordenan de forma natural
o alfabética si son cadenas o strings.
Ahora, claro, el asset es mucho más rápido en rendimiento porque no es ordenado, mientras que el
Trichet cada vez que manipulamos elemento tiene que volver a ordenar, tiene que volver a aplicar el
ordenamiento y eso tiene un costo en rendimiento.
Claro, se agrega un elemento la mitad del set por debajo se vuelve a reordenar el conjunto.
Al set lo vimos, se eliminó un elemento, se tiene que volver a implementar el ordenamiento.
Otra característica de los assets es que utiliza el algoritmo Ascot.
Por lo tanto, todos sus elementos, sus objetos que almacenamos en el asset, tienen implementar el
método Cascote.
Va a comparar y asegura que se almacena en objetos únicos.
Es decir, por ejemplo, si detecta que un objeto ya existe y si ya tiene el mismo Ascot, no lo va
a volver a agregar.
VAR Tonar fols.
El método add simplemente no lo agrega el Linked Asset.
Una implementación del asset porque hereda de.
Pero por detrás de escena trabaja con una lista enlazada.
Es decir, combina un asset con una lista enlazada y mantiene un ordenamiento, pero solo en el orden
que se van agregando los elementos y cualquiera de los sets.
Tanto el Asset como el Tricel o el Linked Asset trabaja con MAP, es decir, por detrás Zena el asset
trabaja con un Jasmeet para almacenar los elementos.
Y por último tenemos los MAP dos implementaciones principales el Jasmeet y el Trim Map y luego tenemos
el Linked Gassman.
Acá almacena los datos en base a nombre y valor.
Es decir, a través de una llave, un nombre, guardamos un objeto ítemes similar.
El asma utiliza el algoritmo el Ascot.
Por lo tanto, todos los elementos que almacenamos en este mapa tiene que implementar el Ascot para
poder compararse y estos elementos como llave son uniko.
Es decir, no podemos tener una llave, un nombre o identificador que esté repetido siempre deben ser
únicos y el trauma es un mapa ordenado.
Bombeaba los métodos más comunes de la colección de Yaba de los colectaron y hemos trabajado con algunos,
por ejemplo en método add o agregar.
Agrega un elemento de la colección y devuelve false.
Si no se pudo agregar típicamente para los set, porque recuerden que los set son únicos y si intentamos
agregar un objeto que ya existe, va a devolver fols.
Theme tenemos el AT all.
Lo que hace recibir por argumento otra colección y agrega También tenemos el método Eclair elimina todos
los elementos que componen a la colección.
El contains es para revisar si existe o no un objeto y por debajo utiliza el método equals para ubicar
y comparar el objeto.
Por ejemplo, ya sea por el Heidy, por el nombre, depende como implementemos películas y empty para
saber si está vacía.
La colección y datos devuelve un objeto iterador que nos permite avanzar a través de los elementos y
por detrás de escena.
Por ejemplo, el foreach utiliza literato.
Es decir, recuerden que para pasar por el foreach el objeto tiene que ser un dato implementar al menos
la interfaz iterativo como lo vimos en el ejemplo del camión.
Se acuerdan con los generic?
Hoy utilizamos el literato rimos para eliminar objetos de la colección y pasamos el objeto y también
utiliza el equals para buscar este elemento.
Encontrarlo y eliminarlo ya sea por el Heidy o por algún atributo rimo OL va a tomar como argumento
una colección, una lista o un set y elimina todos los elementos que están contenido en ese conjunto.
Luego tenemos el metodo Irriten Hold que es básicamente intercepción.
Solamente mantiene los elementos que pasamos por argumento.
Lo demás lo elimina.
El 6 devuelve la canti elementos que componen la colección y el Torrey para convertir la lista o el
set en un arreglo.
Y tenemos otros métodos del liked list.
Como vimos, también es para trabajar con pilas y cola una lista enlazada.
Entonces podemos agregar un elemento al principio de la lista o al final con el First Adeslas obtener
el primer elemento con Get First o el último con Get Last remover al final o al principio con rimo offers
remu blass.
En fin, y varios más.
Y esto sería lo principal de la colección.
Nada más.
Continuamos en la siguiente clase.