Curso Avanzado de Java SE

Curso Avanzado de Java SE

Anahí Salgado Díaz de la Vega

Anahí Salgado Díaz de la Vega

Map, HashMap, TreeMap y LinkedHashMap

21/39

Lectura

En el Curso Básico de Java vimos esta estructura de Colecciones interfaces

Te las expliqué todas menos la interfaz Map la cual te la dejé como reto (Si quieres repasarlo aquí está el material). Existe otra que no aparece en ese árbol se llama Deque

Hoy te platicaré sobre Map

Lo primero que debes saber es que tiene tres implementaciones:

  • HashTable
  • LinkedHashMap
  • HashMap
  • SortedMap ➡️ TreeMap
012915_1138_battleofthe1.jpg

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<K,V>

  • 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 cuentanos en tus palabras cómo funciona Deque.

Aportes 56

Preguntas 0

Ordenar por:

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

deque es un arreglo de elementos similar a un hashMap (Que inserta los elementos, sin un orden particular, uno después del otro) pero con la particularidad de que se puede insertar, remover y hacer otra operaciónes sobre los elementos en ambos extremos del arreglo usando métodos como:

addLast(); removeLast();
addFirst(); removeFirst();

Deque es la interfaz que nos proporciona java para manejar una lista doblemente enlazada. La interfaz Deque nos proporciona una abstracción de los métodos que necesitaremos para manejar tanto una Cola como una Pila.
Ademas de esta interfaz java los proporciona las siguientes implementasiones de la misma:

  • ArrayDeque
  • ConcurrentLinkedDeque
  • LinkedBlockingDeque
  • LinkedList

La interfaz Deque
Se pronuncia como deck, un deque es una cola de doble extremo (double-ended-queue). Un double-ended-queue es una colección lineal de elementos que soportan la inserción y eliminación de elementos en ambos finales (extremos).
La interfaz Deque es un tipo de dato abstracto más enriquecido que Stack y Queue porque implementa ambos al mismo tiempo (stacks y queues).
La interfaz Deque, define métodos para acceder a los elementos de ambos finales o extremos de una instancia Duque.
Se proporcionan métodos para insertar, quitar y examinar los elementos.
Las clases predefinidas como ArrayDeque y LinkedList impelementan la interfaz Deque.
Insert
Los métodos addfirst y offerFirst agregan elementos al principio de una instancia Duque. Los métodos addLast y offerLast agregan elementos al final de una instancia. Cuando la capacidad de la instancia es restringida, los métodos preferidos son: offerFirst y OfferLast porque addFirst puede no arrojar una excepción si esta lleno.
Remove
Los métodos removeFirst y pollFirst eliminan elementos al principio de la instancia y, removeLast y pollLast, eliminan elementos al final. Los métodos pollFirst y pollLast retornan null si la instancia esta vacia (empty) mientras que, los métodos removeFirst y removeLast, arrojan una excepción si la instancia esta vacia (empty).
Retrieve
Los métodos getFirst y peekFirst recuperan los primeros elementos de una instancia Duque. Estos métodos no eliminan el valor de una instancia Duque.
Los métodos getLast y peekLast recuperan los últimos elementos.
Los métodos getFirst y getLast arrojan una excepción si la instancia esta vacia (empty) mientras que, los métodos peekFirst y peekLast retornan NULL.
Los 12 métodos de inserción, eliminación y recuperación de elementos de un Deque, se resumen en la siguiente tabla:

Deque vendría siendo un tipo de interfaz que tiene métodos para insertar, quitar y examinar elementos. Funcionando como una especie de cola o fila almacenando datos.

Aporte, existen bastantes formas de iterar estos objetos, en este post, hay 10:

https://stackoverflow.com/questions/46898/how-do-i-efficiently-iterate-over-each-entry-in-a-java-map/35558955#35558955

Deque es una interface que implementa en conjunto queue (cola) y stack (pila), permitiendo operaciones sobre ambos extremos de la colección

La 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.

He instanciado Map’s mediante su clase hija HashMap y hasta el momento sé que sí puede aceptar valores nulos

Deque es una interfaz que extiende de Queue, por lo tanto tiene la capacidad de realizar todas las funcionalidades de una queue con la peculiaridad de que el Deque no esta limitado al FIFO del Queue sino que nos permite agregar y eliminar elementos en el head y en el tail.

Deque -> lo que entiendo es que funciona como Pilas y las Colas, tienen las funciones de ambos. Puedes acceder al inicio o al final de esta collection.

De que es la combinacion de Stack y Queue. Es una coleccion lineal que permite sacar elementos desce ambos extremos. De esta manera puede comportarse tanto como un Stack donde el primero que entra es el ultimo en salir, o como un Queue donde el primero que entra es el primero en salir.

Es una estructura de datos lineal que permite insertar y eliminar elementos por ambos extremos.
usa estructura de datos LIFO (Last In First Out)(Stack) o FIFO (First In Firts Out)(Queue)

Una colección lineal que apoya la inserción de elementos y la eliminación en ambos extremos.
Esta interfaz define métodos para acceder a los elementos en ambos extremos de la deque. Se proporcionan métodos para insertar, eliminar, y examinar el elemento.

La interfaz deque es un interfaz con cola de doble finalización, es decir una cola de dos extremos, una colección lineal que admite la inserción y eliminación de elementos en ambos puntos de la cola.
Esta interfaz mezcla la estructura de la interfaz Stack (LIFO: Last In Fist Out - Ultimo en Entrar primero en Salir) y la interfaz Queue (FIFO: First In Firts Out - Primero en Llegar Último en salir)

package app;
import java.util.HashMap;
import java.util.Iterator;

import clases.IPrueba;
import clases.Recursividad;

public class App implements IPrueba{

public static void main(String[] args) {
	HashMap<Integer, String> mapaNombres = new HashMap<Integer,String>();
	
	mapaNombres.put(1, "Marcos");
	mapaNombres.put(5, "Fede");
	mapaNombres.put(8, "Mati");
	mapaNombres.put(3, "Ma");
	mapaNombres.put(4, "Lucas");
	
	imprimirMapa(mapaNombres);

}

private static void imprimirMapa(HashMap<Integer, String> mapaNombres) {
	
	Iterator<Integer> iterador = mapaNombres.keySet().iterator();
	
	while(iterador.hasNext()) {
		Integer key = iterador.next();
		System.out.println("Clave: " + key + " -> Valor: " + mapaNombres.get(key));
	}
}

}

Lo que entendí es que un Deque o (Deck) es una cola de doble terminación (Valor,Clave): esto implica que es una colección que soporta la inserción y eliminación de elementos en ambas terminaciones.
Deque es un tipo de dato abstracto mucho mas rica que las los del tipo Stack y Queue, ya que implementa ambas al mismo tiempo

básicamente, deque emplea propiedades de un stack y una queue.

imaginen una fila de super mercado donde podemos añadir y remover gente de ambos extremos, podemos iterar la fila, retaer los elementos de dicha fila.

veo esta interface muy útil a la hora de organizar y manejar procesos como consultas de bases de datos.

deque es una interface libre de restricciones de capacidad que permite almacenar elementos de manera dinamica en ambos puntos de la coleccion (inicio o final) ya que trabaja con las estructuras queue (metodo FIFO) y stack (metodo LIFO)

adjunto link del articulo:

https://www.geeksforgeeks.org/deque-interface-java-example/

Un Deque es una cola de doble finalización, es una interfaz que te permite la inserción de elementos por ambos extremos

Deque es una Interfaz para cola que permite el comportamiento tanto de cola como de pila es decir insertar objetos tanto al principio como al final,

Deque es una interfaz que te permite la inserción de elementos por ambos extremos se puede utilizar como las pilas ultimo en entrar primero en salir y como las colas primero en entrar primero en salir, por tal motivo se permite la inserción en ambos lados, para finalizar un Deque es un dato de tipo abstracto.

Imagina que desarrollas un juego de naipes. En el hay un modo de juego donde puedes cambiar una carta de tu mano por una de la cima (topdeck) poniendo la primer al fondo (bottom). La interfaz Deque (Deck) modela perfectamente ese comportamiento ya que mezcla las interfaces Stack y Queue

Deque permite la manipulación de los elementos contenidos en ambos extremos del stack, permitiendo que se realice la obtención de los elementos bajo las modalidades first-in-first-out y last-in,first-out

Yo entendí esto: La interfaz deque es una interfaz con cola de doble finalización, es decir una cola de dos extremos, una colección lineal que admite la inserción y eliminación de elementos en ambos puntos de la cola. Ésta implementa Stacks y Queue´s al mismo tiempo. También ésta define los métodos para acceder a los elementos en los dos finales de las colas. Los métodos proporcionados son los de Insertar, remover o examinar los elementos.

Es una parte muy importe y sirve para leer por ejemplo, tipo de dato MAP que son un tipo de dato por utilizado por la base de datos Amazon DynamoDB,

Es una interfáz que simula el comportamiento de una pila o cola. Con métodos que pueden ser usados dependiendo de la necesidad, que lancen excepciones o simplemente devuelvan valor null, bastante útil !!

Deque llamado comunmente “deck”, es la abreviacion de Duble Ended Queue, esta interfaz para manejo de colecciones de datos es muy util para guardar elementos en una lista la cual puede ser tratada como FIFO o LIFO, puede insertar, leer y borrar tanto como del inicio como del final del deque, tiene 2 variantes de todos sus metodos, uno que regresa una ecepcion si la operacion fallo, y sus equivalentes que devuelen un valor especial (null o falso, dependiendo de la operacion). Al contrarion de la clase List, deque no ofrece soporte para valores indexados. Es recomendable no llenar el deque con valores null, porque aunque es valido, no es recomendable dado a la naturaleza de de sus metodos.

Genial.

Es interesante saber que existe una interface que cuenta con métodos predefinidos para almacenar, consultar o eliminar información del mapa que se crea con esta interface,

Deque es una interfaz que funciona como pilas y colas, es decir, pueden insertarse o eliminarse elementos des de sus dos finales, des del inicio o dels del final de su doble cola.

Deque es una interfaz con comportamineto similar a una pila o cola en la cual se pueden insertar y eliminar elementos de tipo LIFO y FIFO

La interfaz Deque es una cola de dos extremos, es una colección lineal de elementos que admite la insercción y eliminación de elementos en los dos extremos.
Clases como ArrayDequey LinkedList implementan la insterfaz Deque.

Es una estructura que se la puede tratar como stack y queue

Es una estructura de datos que puede manejarse como un pila o una cola al tiempo (FIFO y LIFO).

Es una interfaz que permite implementar métodos que hacen que le comportamiento del mapa sea pila o cola, es decir nos permite trabajar con LIFO y FIFO.

Un deque es una colección de elementos que soporta la inserción y la eliminación de elementos por ambos lados. La colección puede servir como una cola(Queue) o como una pila (Stack). Se puede usar como una lista tipo LIFO (Last In First Out, El ultimo en entrar es el primero en salir) o FIFO (First In First Out, El primero en entrar es el primero en salir).

Es una interfaz que se maneja como pila y cola, que permite la inserción, eliminación y recuperación de elementos

Es una interface que funciona como cola , los elementos de pueden trabajar desde los extremos ,añadir , eliminar o seleccionar.

Son como diccionarios ???

Los compañeros anteriores tienen razón, es una estructura (colección) que funciona como pila y como cola (stack o queue); los elementos se añaden por ambos extremos; también se pueden ‘encontrar’ y ‘eliminar’ independiente de como fueron añadidos a la estructura.

Un 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 extremos. La interfaz Deque es un tipo de datos abstracto más enriquecido que Stack y Queue porque implementa pilas y colas al mismo tiempo. La interfaz Deque, define métodos para tener acceso a los elementos en ambos extremos de la instancia de Deque. Se proporcionan métodos para insertar, quitar y examinar los elementos. Las clases predefinidas como ArrayDeque y LinkedList implementan la interfaz Deque.

Es una interfaz que funciona como pila y la cola de dos extremos, y tiene métodos para acceder a ambos extremos y realizar, agregaciones, eliminación y obtener los elementos.

Un Deque es una interface que funciona como un stack y un queue al mismo tiempo.

Es una interfaz que funcionan como cola y se puede trabajar en ambos extremos, los métodos que tenemos son insertar, eliminar y examinar los elementos.

Deque es una interfaz que facilita la implementacon de LIFO O FIFO ya que puede ser Stack o queue a la vez.

I have a doubt about LinkedHashMap, if you say it sort the information as it add, why search would be slower? if the information is sorted, search wouldn’t be faster?

Excelente explicación de los Map

Gracias por la explicación y los ejemplos 😃

Deque es una fusión de un stack y queue, permitiéndonos manipular elementos al principio y al final del arreglo.

Gracias por la informacion, en que contexto se podria aplicar Map?

Hola a todos.
Creo que la profesora se ha equivocado, debido a que HashMap permite tanto claves como valores nulos.
Se puede consultar la documentación.
https://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html

es una pila doble donde se pueden insertar en ambos extremos elementos e ir sacándolos de la misma forma, pero también se puede comportar como una cola, finalmente se puede tener ambos comportamientos dependiendo de la necesidad sin usar una distinta implementación en cada caso.

buena explicación

la interfaz deque funciona con dos extremos que admite la eliminación en ambos extremos entre estos también cuentan con algunas funciones como lo es: add first usado la para la inserción al principo del array de objetos asi como también renové last

La interfaz Deque nos permite crear una coleccion de elementos con doble final, ya que permite la insercion al inicio de la coleccion como un Stack o al final de la coleccion como una Queue.

Que interesante que exista ya que a comporta de múltiples formas a la vez, su utilidad se ve impresionante sin embargo hay que tener en cuenta los métodos que se usan para no afectar la lógica de negocio