Curso de Java SE Orientado a Objetos

Curso de Java SE Orientado a Objetos

Anahí Salgado Díaz de la Vega

Anahí Salgado Díaz de la Vega

Collections

25/38

Lectura

Otras interfaces que son muy importantes en Java son los llamados Collections

Los Collections nos van a servir para trabajar con colecciones de datos, específicamente y solamente con objetos, para esto recuerda que tenemos disponibles nuestras clases Wrapper que nos ayudan a convertir datos primitivos a objetos.

Los collections se diferencian de los arrays en que su tamaño no es fijo y por el contrario es dinámico.

A continuación te muestro un diagrama de su composición:

IMG1.png

Como podemos observar el elemento más alto es la interfaz Collection, para lo cual, partiendo de su naturalidad de interface, entendemos que tiene una serie de métodos “básicos” dónde su comportamiento será definido a medida que se vaya implementando en más elementos. De ella se desprenden principalmente las interfaces Set y List.

La interface Set tendrá las siguientes características:

Almacena objetos únicos, no repetidos.
La mayoría de las veces los objetos se almacenarán en desorden.
No tenemos índice.

La interface List tiene éstas características:

Puede almacenar objetos repetidos.
Los objetos se almacenan en orden secuencial.
Tenemos acceso al índice.

Si seguimos analizando las familias tenemos que de Set se desprenden:

Clase HashSet
Interfaz SortedSet y de ella la clase TreeSet.

HashSet los elementos se guardan en desorden y gracias al mecanismo llamado hashing (obtiene un identificador del objeto) permite almacenar objetos únicos.

TreeSet almacena objetos únicos, y gracias a su estructura de árbol el *acceso es sumamente rápido.

Ahora si analizamos la familia List, de ella se desprenden:

Clase ArrayList puede tener duplicados, no está sincronizada por lo tanto es más rápida
Clase Vector es sincronizada, los datos están más seguros pero es más lento.
Clase LinkedList, puede contener elementos duplicados, no está sincronizada (es más rápida) al ser una estructura de datos doblemente ligada podemos añadir datos por encima de la pila o por debajo.

IMG2.png

Sigamos con Map

Lo primero que debes saber es que tiene tres implementaciones:

HashTable
LinkedHashMap
HashMap
SortedMap ➡️ TreeMap

img3.png

La interfaz Map no hereda de la interfaz Collection porque representa una estructura de datos de Mapeo y no de colección simple de objetos. Esta estructura es más compleja, pues cada elemento deberá venir en pareja con otro dato que funcionará como la llave del elemento.

Map

Donde K es el key o clave
Donde V es el value o valor

Podemos declarar un map de la siguiente forma:

Map<Integer, String> map = new HashMap<Integer, String>();
Map<Integer, String> treeMap = new TreeMap<Integer, String>();
Map<Integer, String> linkedHashMap = new LinkedHashMap<Integer, String>();

Como observas solo se puede construir el objeto con tres elementos que implementan de ella: HashMap, TreeMap y LinkedHashMap dejando fuera HashTable y SortedMap. SortedMap estará fuera pues es una interfaz y HashTable ha quedado deprecada pues tiene métodos redundantes en otras clases. Mira la funcionalidad de cada uno.

Como te conté hace un momento Map tiene implementaciones:

HashMap: Los elementos no se ordenan. No aceptan claves duplicadas ni valores nulos.
LinkedHashMap: Ordena los elementos conforme se van insertando; provocando que las búsquedas sean más lentas que las demás clases.
TreeMap: El Mapa lo ordena de forma “natural”. Por ejemplo, si la clave son valores enteros (como luego veremos), los ordena de menos a mayor.

Para iterar alguno de estos será necesario utilizar la interface Iterator y para recorrerlo lo haremos un bucle while así como se muestra:

Para HashMap

// Imprimimos el Map con un Iterador
Iterator it = map.keySet().iterator();
while(it.hasNext()){
  Integer key = it.next();
  System.out.println("Clave: " + key + " -> Valor: " + map.get(key));
}

Para LinkedHashMap

// Imprimimos el Map con un Iterador
Iterator it = linkedHashMap.keySet().iterator();
while(it.hasNext()){
  Integer key = it.next();
  System.out.println("Clave: " + key + " -> Valor: " + linkedHashMap.get(key));
}

Para TreeMap

// Imprimimos el Map con un Iterador
Iterator it = treeMap.keySet().iterator();
while(it.hasNext()){
  Integer key = it.next();
  System.out.println("Clave: " + key + " -> Valor: " + treeMap.get(key));
}

Ahora lee esta lectura y en la sección de tutoriales cuéntanos en tus palabras cómo funciona Deque.

Aportes 80

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.


Un pequeño aporte a la comunidad

No se ustedes, pero para mi este tema ameritaba Clases en video.

Buen día

La verdad no me quedo claro este tema, indague mas y encontré este curso Píldoras Informáticas , adicional mente me di a la tarea de practicar con los ejercicios de este sitio w3resource. La implementación de cada uno esta en Mi repo publico. Espero esto aporte a su formación a mi me esta funcionando.

!saludos¡

El objetivo de las estructuras de datos es el de facilitar la organización de los datos para una manipulación eficiente de los mismos con el mínimo de recursos (tiempo de proceso y espacio de memoria) . Tenemos las siguientes estructuras: Listas, pilas, colas, arboles, etc., la cual deberemos de seleccionar de acuerdo al tipo de problema que queremos resolver.

Deque es una cola de doble extremo. Una cola de doble extremo es una colección lineal de elementos que admite la inserción y eliminación de elementos en ambos puntos finales. La interfaz Deque es un tipo de datos abstractos más rico que una pila (Stack) y una cola (Queue) porque implementa ambas (pilas y colas) al mismo tiempo. La interfaz Deque define métodos para acceder a los elementos en ambos extremos de la instancia de Deque. Se proporcionan métodos para insertar, eliminar y examinar los elementos. Clases predefinidas como ArrayDeque y LinkedList implementan la interfaz Deque

De mis favoritas es MAP, tiene una gran utilidad para guardar los datos con indices. Algo asi como una tabla en memoria.

Esto me recordó a mi clase de estructura de datos en la U… y tuve flashbacks vietnamitas :,v

Python soluciona todo esto de manera super facil usando solo {} () [], de igual manera, es bueno que en java a pesar de ser mas complejo tambien tenga esas posibilidades 😄

Un deque nos permite tener el comportamiento LIFO y FIFO en una misma estructura.
Este nos permite:

  • Añadir elementos al inicio o al final

  • Eliminar elementos del inicio o final

No es muy claro como funcionan las colleciones espero se explique más adelante como ya que con ejemplos prácticos se entendió muy bien polimorfismos, herencia e interfases

Es bastante amplia la explicación, me metí en la documentación de Oracle y hay mucha información al respecto, pero podría decirse que una interfaz collection set o list se maneja como una lista de tuplas, ya que pueden ser o no organizadas, pero siempre linealmente, y una interfaz map se maneja como un diccionario ya que esta estructurada bajo el mismo formato key:value.

Este tema deberia ser mas explicado a fondo

Un deque (usualmente pronunciado como deck) es una interfaz en Java que permite manejar datos en una estructura de datos doblemente ligada (también conocida como una cola de doble terminación). Esto último es una colección lineal de elementos en la que se pueden insertar y eliminar elementos al principio y al final de la colección. La interfaz deque proporciona métodos para acceder a ambos lados de la instancia de deque y realizar operaciones como insertar, borrar y recuperar elementos.

Según entendí es una forma de manipular los datos mediante dos colas, donde se insertan los nodos en cualquiera de los dos extremos lo caul la hace mas dinamica

Deque es una interface que ayuda a manejar pilas o colas con su naturaleza FIFO (first in, first output) o LIFO (last in, first out)
Tal vez, podría darse uso para almacenar mensajes, peticiones, o sistema de colas (como en algunas entidades bancarias).

Creo que haré un .pdf de todo esto, de forma más visual. ¿Alguien de acuerdo?

🐱‍💻 Deque es una interfaz que nos permite acceder a los elementos en ambos extremos de la colección. Para este propósito nos proporciona métodos de inserción, eliminación y búsqueda de elementos.

La interfaz Deque funciona como una Pila(Stack) y una Cola(Queue) a la vez. Puedes interactuar en una instancia Deque con sus elementos iniciales y los finales también, puedes insertar, eliminar y recuperar tales elementos.

la interfaz Deque es una cola de dos extremos. es una colección lineal de elementos que funciona para insertar, eliminar y recuperar elementos en ambos extremos. la Deque es mas rica que la Pila (Stack) y una cola (Queue) porque implementa colas y pilas al mismo tiempo.

// Imprimimos el Map con un Iterador
Iterator it = map.keySet().iterator();
while(it.hasNext()){
Integer key = it.next();
System.out.println("Clave: " + key + " -> Valor: " + map.get(key));
}
no funciona esto

Esta super la documentación, pero si hubiese sido genial un ejemplo aplicativo 😕

Me confunde un poco leer tantos Map, LinkedHashMap y demás, pero creo que voy comprendiendo poco a poco

cuando lo lees con la voz de la profesora

Deque es una interfaz que se puede implementar con clases predefinidas como lo son ‘ArrayDeque’ y ‘LinkedList’. Lo bueno es que se trata de una cola con doble final, que significa que se comporta como una cola y una pila al mismo tiempo. Es decir, podemos hacer uso de FIFO y LIFO con la misma colección y de una manera sencilla. También podemos acceder a sus datos para removerlos, agregar nuevos o bien obtenerlos.

La interfaz Deque es una estructura de data abstracto. Funciona como la combinacion de stacks y queues.
Stacks : LIFO - Last In First Out (El ultimo dato que ingreso sera el primero en salir)
Queues : FIFO - First In First Out (El primer dato que ingreso sera el primero en salir)

En un Deque podemos sacar datos del princio de la fila (los primeros en ingresar) y tambien del final de la file (los ultimos en ingresar).

Deque es una interfaz de doble entrada, el cual nos permite insertar o eliminar elemento al inicio o al final de la cola (queue), esto podriía ser util cuando tengamos que aplicar FIFO o LIFO.

buen resumen de los collections 😃

La interface Deque es una colección de elementos que permite insertar, eliminar y recuperar en ambos extremos.

DEQUE (Double ended - queue), nos permite agregar y eliminar al inicio o al final de la pila o cola.
No permite agregar valores nulos (null)

Los collections son totalmente nuevos para mí, a la primara cuesta entenderlos.

de la lectura entiendo que la interface Deque se usa para tener colecciones de objetos que se pueden comportar(segun quiera el programador) como cola o pila, es decir, que los objetos se agreguen, eliminen o lean al principio o al final de la lista.

El deque(Double Ended QUEue) es una colección lineal que solo permite insertar y retirar elementos de los extremos, proporcionando las funcionalidades de los Stack(pilas) y las Queue(Colas), en otras palabras permite usar LIFO y FIFO.

Estas Caracteristicas nos obligan a que si quisiéramos eliminar o insertar un elemento en el centro del deque tendríamos que eliminar todos los elementos posteriores o todos los elementos anteriores. Y luego reconstruirlo segun nuestra necesidad. La interface provee de métodos como removeLastOccurence y removeFirstOccurence pero dada la forma en la que funciona esta interface, dependiendo de donde este ubicado el elemento a remover necesitar hacer una mayor o menor cantidad de iteraciones sobre la colección

Deck o Deque, es una lista tipo cola de doble extremo, es decir permite agregar o retirar objetos por ambos lados: inicio de la cola o final de la cola.

(permite ingresar y retirar elementos) inicio cola - [ ] - [ ] - [ ] - fin cola (permite ingresar y retirar elementos)

La interfaz de deck permite agregar elementos , eliminar elementos y recuperar elementos (este ultimo solo recupera el valor mas no elimina el elemento de la lista). para cada uno la interfaz es especifica por que en los metodos se indica si quieres realizar la operacion por el inicio o el final de la lista.

Hola a todos, el tema me resulto un poco dificil de entender ya que es la primera vez que lo veo, me gustaria saber si alguno de ustedes me sugire algun video o clase que lo explique con mas detenimiento. Muchas gracias por su ayuda!

En ciertas ocasiones trabaje con ArrayList para poder traer varios registros de empleados en una base de datos y mostrarlos en una tabla para poder editarlos, eliminarlos o añadir nuevos, sin embargo, no conocía los otros tipos de List que se explican acá. Me gustaría verlos en ejemplos para poder entenderlos mejor.

Deque es una colección linear que combina lo que es la clase Stack y la clase Queue, haciendo así posible la inserción de elementos tanto al inicio como al final de la colección, también puede borrar y agregar elementos. Se menciona que si la capacidad de la instancia del Deque es limitada y NO puede almacenar más elementos estos pueden remplazarse con los metodos offerFirst y offerLast, ya que si se emplean los elementos addFirst y addLast resultaría en una excepción debido a que sobrepasó el limite de la colección.

Deque Interface se pronuncia de la siguiente manera: Deck, es un tipo de lineal de colección que permite agregar, **remover ** y **recuperar ** elementos por ambos extremos. Tanto el inicio como el final. También es conocido como un tipo de estructura de datos más eficaz que la Pila o Cola ; ya que aplica los mismos principios de LIFO y FIFO.


Cada una de las 3 acciones que libera 4 métodos, especificados n la siguiente tabla:

Deque es mas facil de intender imagina que tienes dos salidas y entradas por donde sacar o ingresar datos.

Una mayor explicación y más detallada, sobre la interface Iterator:
Collecciones y Interface Iterator
Lee el documento completo y te ayudará a entender varios concepto que explica en clase. 😁😁

Viniendo de Python y Javascript, ahora puedo ver las enormes ventajas de desarrollar en un lenguaje de programación interpretado moderno, todo esto se simplifica demasiado y la velocidad en el proceso de desarrollo también, pero es interesante entender todo esto.

Este tema es algo complejo para solo lectura, les comparto la clase del curso viejo donde se explica mejor:
https://platzi.com/clases/1222-java-basico-2018/10029-interfaz-list-arraylist-y-vector/

Las colecciones son almacenes dinámicos de objetos.

  • Los colecciones permiten ordenar la información/objetos

  • Las colecciones permiten insertar y eliminar los elementos/objetos.

  • Collection Set:

    Permite almacenar elementos no repetidos y sin ordenar.

  • Collection List:

    Los elementos pueden estar repetidos y están en orden número (índice) [1,2,3,4,5…]

  • Collection Queue (colas):

    Solo se permite acceder a elementos que estén al inicio o al final.

  • Map:

    Permite crear una colección de elementos repetibles, indexados por claves únicas repetibles.

The Deque Interface
- Es una colección linear que nos ayuda a insertar y actualizar datos en los extremos de la pila.
- Define métodos para la inserción y actualización de datos en los extremos de la colección
- ArrayDeque y LinkedList implementan la interface Deque

ej:

compact1, compact2, compact3
java.util

Interfaz Deque<E>

Parámetros de tipo:
E - el tipo de elementos que se encuentran en esta colección

Todas las superinterfaces:
Recopilación<E>, Iterable<E>, Queue<E>

Todas las subinterfaces conocidas:
BloqueoDeque<E>

Todas las clases de implementación conocidas:
ArrayDeque, ConcurrentLinkedDeque, LinkedBlockingDeque, LinkedList

Por lo que entendi la interfaz Deque define métodos para acceder a los elementos en ambos extremos de la instancia.
Se proporcionan métodos para insertar, quitar y examinar los elementos.
Y las clases predefinidas como ArrayDeque y LinkedList implementan la interfaz.

Honestamente, Deque, esa definiendo una manera diferente de crear una colecion de forma linear, la diferencia esque esta, tiene doble entrada y puedes remover elements, como su nombre lo indica, en las dos entradas(o dos end points como le quieran llamar),

Defines Metodos para acceder a elementos de las dos entradas, estos metodos son

Insert, Remove y retrieve, casi como cuando pusheamos algo algun arreglo, algo asi, solo que en este pusheamos no nadamas Arraylist, pusheamos Sets.

Yo entendí Deque de la siguiente manera:

Deque es una interfaz que es implementada por listas o arreglos que permiten añadir y retirar elementos tanto del principio como del final. Esta interfaz le proporciona los métodos para insertar, remover y consultar elementos a dichas listas y arreglos.

Basicamente para resumir lo que hace esta interface Deque, es el proceso de inserción, eliminación y recuperación de elementos, a través de 12 métodos, ya sea en forma de pila o cola, e implementa estos mismos al mismo tiempo. (El concepto puede ser mas extenso, pero en resumen puede ser esta, una definición corta)

Deque es una interfaz de doble entrada, el cual nos permite insertar o eliminar elemento al inicio o al final de la cola (queue), esto podriía ser util cuando tengamos que aplicar FIFO o LIFO.

No estoy muy seguro, pero en LinkedHashMap al ordenar al ir insertando no debería hacer las busquedas mas rápidas? (dice que las busquedas son mas lentas en la descripción), ya que al estar ordenado sería mas rápido buscar, lo que sería mas lento serían las inserciones, ya que al insertar cada elemento verificaría en donde debería de ir

Hola comunidad, ¿cual interfaz es mas usada Set, List o Map?

La interfaz Deque (pronunciada deck) es una colección con final de cola en ambos extremos. En esta interfaz se proveen métodos para insertar, examinar y remover elementos.
Con los métodos incluidos podemos insertar elementos al comienzo o al final de la cola.

Seria bueno, algún ejemplo del uso de Deque para reforzar la lectura

A veces por su facilidad de uso, yo uso las LinkedList para almacenar obejtos complejos 😃

Deque interfaz, del que salen las clases ArrayDeque y LinkedList, la principal característica se define como doble inicio o doble final ya que ambos extremos de la colección pueden tener funciones de insertar, remover y consultar, no tendría limite en tamaño de objeto que contenga ni en cantidad de objetos que liste, gracias a esto nunca generaría una excepcion.
también puede verificar si un objeto esta repetido.

La Deque es una estructura que permite inserciones y borrados al principio y al final.

La interfaz Deque la implementa LinkedList, ha sido descrito su funcionamiento anteriormente en los posteos y en el ‘artículo’ de esta clase.

El Deque es una interfaz y colección lineal que contiene datos y que se caracteriza por realizar operaciones como insertar, eliminar o encontrar datos tanto desde el comienzo o final de la colección.

Los “Deque” son una estructura de datos conocida como bicolas, en las que se pueden acceder, agregar, o eliminar elementos por ambos extremos de la cola, es decir, al prinicipio o al final.
Los metodos que podemos utilizar para agregar elementos son:
* addFirst (agrega un elemento al principio)
* addLast (agrega un elemento al final)
Si la cola tiene una capacidad restringida, entonces usaremos los metodos offerFirst y offerLast.
Los metodos que podemos utilizar para quitar elementos son:
* removeFirst (quita un elemento del principio)
* removeLast (quita un elemento del final)
Si la cola se encuentra vacia estos dos metodos arrojaran una excepcion; tambien podemos usar pollFirst y pollLast,
que en caso de que la cola se encuentre vacia retornaran null.
Los metodos que podemos utilizar para acceder a elementos son:
* getFirst (retorna el primer elemento)
* getLast (retorna el ultimo elemento)
Al igual que al remover elementos,en caso de que la cola se enecuentre vacia estos metodos arrojaran una
excepcion; tambien podemos usar peekFirst y peekLast, que en caso de que la cola se encuentre vacia retornaran
null.
Disculpen la falta de tildes, estoy usando un teclado en ingles.
Muy buen curso, saludos!

Pienso que la interfaz Deque es de mucha utilidad para controlar ciertos eventos de inserccion, remove y Retrieve de inicio a fin. No lo he usado pero desde ahora lo haré.

Excelente explicación de las interfaces Collections y el Map

El Deque (también pronunciado como “Deck”) es una colección linear de objetos que puede ser consultada tanto del inicio como del final. Para esto tiene métodos definidos para inserción, eliminación y consulta de primero y final de la lista.

También tiene métodos espeficicos que buscan un elemento de la lista en específico y estos retornan true si se encuentra o false si no.

Muy buena explicacion, al comienzo vi mucho texto pero cuando empece a leer, me di cuenta lque es re importante

Deque implementa tanto de Stack como de Queue dando como resultado el poder utilizar metodos de ambos

La interfaz Deque es un tipo de dato abstracto mejor que stacks y queues pq implementan tanto pilas como colas al mismo tiempo, en esta interfaz se definen métodos para acceder a los elementos: insertar, eliminar y recuperar, se puede utilizar tanto como pila o como cola.

Eso no me lo sabia

Genial

Super a profundizar en todos estos nuevos conceptos.

Deque es una colección lineal de elementos que soporta el insertar y remover datos en ambos puntos, algo asi como la LinkedList que vimos mas arriba.

No me quedó claro estos nuevos conceptos. No encuentro el uso práctico.
HashSet es lo mismo que conjuntos, Map es igual a diccionarios, ArrayList es igual a Listas dinámicas; pero sus compañeros como TreeMap, TreeSet,LinkendList no entiendo el concepto y no encuentro el uso práctico.

Deque: Es una interface, es una cola de dos extremos, es decir, una colección lineal de elementos que permite insertar y elimiinar desde los puntos finales. Implementa colas y pilas al mismo tiempo; y las clases ArrayDeque y LikenList implementar la Deque interface.

La Deque interfaz define métodos para acceder a los elementos en ambos extremos de la Deque instancia. Esto es importante porque significa que pone el práctica los conceptos de FIFO(first in, first out) y LIFO (last in, first out), lo que significa que es más eficiente porque implementa las estructuras de datos pilas y colas al mismo tiempo.

Interfase Deque es una colección lineal de elementos cuyo funcionamiento permite de manera eficiente la inserción y remoción elementos del principio y final de la colección, esto favorece el uso eficiente de pilas y colas.

**ArrayDeque: ** Una cola de dos extremos que se implementa como una array circular.










La Interfaz Deque, es una colección lineal de elementos, que permite eliminar y insertar tanto al inicio como al final, implementa LIFO y FIFO al mismo tiempo. Proporciona métodos para insertar, recuperar y eliminar elementos.
Insertar: al comienzo(addFirst(), offerFirst()) - al final(addLast(), offerLast()).
Recuperar: al comienzo(getFirst(),peekFirst())- al final(getLast(), peekLast()).
Eliminar: al comienzo(removeFirst(), poolFirst()) - al final(removeLast(), poolLast()).

Deque
Es una interfaz una colección lineal de elementos que admite insertar y eliminar elementos tanto por el inicio como por el final de la colección. Esta interfaz implementa al mismo tiempo Stack (Pila) y Queue (Cola) y tiene métodos para acceder a los elementos en ambos extremos de la colección. Las clases predefinidas ArrayDeque y LinkedList implementan la interfaz Deque.

Esta interfaz cuenta con los siguiente métodos:

es fácil confundirse con esto, el deque entendí que se puede usar el FIFO o el LIFO

Collections se usan para casas específicos, lo demás se usan interfaces.