Académique Documents
Professionnel Documents
Culture Documents
Info. Artculo
Entradas
Preguntas?
Videos
Libros
Buscar
Categora:
pdfcrowd.com
Categora:
pdfcrowd.com
Lenguajes de Programacin
pdfcrowd.com
pdfcrowd.com
Otro elemento importante a la hora de trabajar con los Maps (aunque no lo es tanto como a la hora de trabajar con
los ArrayList) son los Iteradores (Iterator). Los Iteradores sirven para recorrer los Map y poder trabajar con ellos.
Los Iteradores solo tienen tres mtodos que son el hasNext() para comprobar que siguen quedando elementos
en el iterador, elnext() para que nos de el siguiente elemento del iterador; y el remove() que sirve para eliminar
el elemento del Iterador. En realidad se puede prescindir de los iteradores para trabajar con los Map ya que la gran
ventaja de los Map frente a los ArrayList, es que estos tienen una clave asociada al objeto y se les puede buscar
por la clave, aunque nunca esta de ms saber utilizar los iteradores para manejar los Map.
Antes de seguir con ejemplos, os habris dado cuenta que hemos empezado la entrada diciendo que Map es una
Interface y por tanto se deben de implementar los mtodos de la interface. Java ya tiene implementadas varias
clases Map. No vamos a explicar todas, pero si las tres que consideramos ms importantes y tiles para que
veis la diferencia como son la clase HashMap, TreeMap y LinkedHashMap. La diferencia principal de estas 3
clases es la forma o el orden en las que guardan los valores en el Map. Si disteis en la carrera de Ingeniera
Informtica (o derivados) toda esa teora de arboles (que no vamos a recordar aqu), verais que la gran diferencia
entre los arboles AVL, B, B+ y B* es la forma en la que guardan los datos para despus optimizar las altas, bajas,
modificaciones y consultas de los valores. Pues bien toda esa teora en esta entrada para nosotros es
trasparente, pero esta bien que veamos estas tres clases para que en funcin de vuestro problema elijis la mejor
clase:
HashMap: Los elementos que inserta en el map no tendrn un orden especfico. No aceptan claves
open in browser PRO version
pdfcrowd.com
Con un HashMap
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "Casillas");
map.put(15, "Ramos");
map.put(3, "Pique");
map.put(5, "Puyol");
map.put(11, "Capdevila");
map.put(14, "Xabi Alonso");
map.put(16, "Busquets");
map.put(8, "Xavi Hernandez");
map.put(18, "Pedrito");
map.put(6, "Iniesta");
map.put(7, "Villa");
// 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));
}
El resultado que tenemos es el siguiente, en el que vemos que nos da los objetos sin un orden lgico:
Clave: 16 -> Valor: Busquets
Clave: 1 -> Valor: Casillas
open in browser PRO version
pdfcrowd.com
Clave:
Clave:
Clave:
Clave:
Clave:
Clave:
Clave:
Clave:
Clave:
18
3
5
6
7
8
11
14
15
->
->
->
->
->
->
->
->
->
Valor:
Valor:
Valor:
Valor:
Valor:
Valor:
Valor:
Valor:
Valor:
Pedrito
Pique
Puyol
Iniesta
Villa
Xavi Hernandez
Capdevila
Xabi Alonso
Ramos
Con un TreeMap
Map<Integer, String> treeMap = new TreeMap<Integer, String>();
treeMap.put(1, "Casillas");
treeMap.put(15, "Ramos");
treeMap.put(3, "Pique");
treeMap.put(5, "Puyol");
treeMap.put(11, "Capdevila");
treeMap.put(14, "Xabi Alonso");
treeMap.put(16, "Busquets");
treeMap.put(8, "Xavi Hernandez");
treeMap.put(18, "Pedrito");
treeMap.put(6, "Iniesta");
treeMap.put(7, "Villa");
// Imprimimos el Map con un Iterador que ya hemos instanciado anteriormente
it = treeMap.keySet().iterator();
while(it.hasNext()){
Integer key = it.next();
System.out.println("Clave: " + key + " -> Valor: " + treeMap.get(key));
}
El resultado que tenemos es el siguiente en el que vemos que nos ordena los objetos por clave en orden natural:
Clave:
Clave:
Clave:
Clave:
Clave:
1
3
5
6
7
->
->
->
->
->
Valor:
Valor:
Valor:
Valor:
Valor:
Casillas
Pique
Puyol
Iniesta
Villa
Are you a developer? Try out the HTML to PDF API
pdfcrowd.com
Clave:
Clave:
Clave:
Clave:
Clave:
Clave:
8
11
14
15
16
18
->
->
->
->
->
->
Valor:
Valor:
Valor:
Valor:
Valor:
Valor:
Xavi Hernandez
Capdevila
Xabi Alonso
Ramos
Busquets
Pedrito
Con un LinkedHashMap
Map<Integer, String> linkedHashMap = new LinkedHashMap<Integer, String>();
linkedHashMap.put(1, "Casillas");
linkedHashMap.put(15, "Ramos");
linkedHashMap.put(3, "Pique");
linkedHashMap.put(5, "Puyol");
linkedHashMap.put(11, "Capdevila");
linkedHashMap.put(14, "Xabi Alonso");
linkedHashMap.put(16, "Busquets");
linkedHashMap.put(8, "Xavi Hernandez");
linkedHashMap.put(18, "Pedrito");
linkedHashMap.put(6, "Iniesta");
linkedHashMap.put(7, "Villa");
// Imprimimos el Map con un Iterador que ya hemos instanciado anteriormente
it = linkedHashMap.keySet().iterator();
while(it.hasNext()){
Integer key = it.next();
System.out.println("Clave: " + key + " -> Valor: " + linkedHashMap.get(key));
}
El resultado que tenemos es el siguiente en el que vemos que nos ordena los objetos tal y como los hemos ido
introduciendo:
Clave:
Clave:
Clave:
Clave:
Clave:
Clave:
Clave:
1
15
3
5
11
14
16
->
->
->
->
->
->
->
Valor:
Valor:
Valor:
Valor:
Valor:
Valor:
Valor:
Casillas
Ramos
Pique
Puyol
Capdevila
Xabi Alonso
Busquets
Are you a developer? Try out the HTML to PDF API
pdfcrowd.com
Clave:
Clave:
Clave:
Clave:
8
18
6
7
->
->
->
->
Valor:
Valor:
Valor:
Valor:
Xavi Hernandez
Pedrito
Iniesta
Villa
Una vez que hemos visto las diferencias entre unas clases de Map y otras, vamos a ver el funcionamiento de los
mtodos que hemos mencionado al principio:
System.out.println("********* Trabajando con los mtodos de Map *********");
System.out.println("Mostramos el numero de elementos que tiene el TreeMap: treeMap.size() =
"+treeMap.size());
System.out.println("Vemos si el TreeMap esta vacio : treeMap.isEmpty() = "+treeMap.isEmpty());
System.out.println("Obtenemos un elemento del Map pasandole la clave 6: treeMap.get(6) =
"+treeMap.get(6));
System.out.println("Borramos un elemento del Map el 18 (porque fue sustituido):
treeMap.remove(18)"+treeMap.remove(18));
System.out.println("Vemos que pasa si queremos obtener la clave 18 que ya no existe:
treeMap.get(18) = "+treeMap.get(18));
System.out.println("Vemos si existe un elemento con la clave 18: treeMap.containsKey(18) =
"+treeMap.containsKey(18));
System.out.println("Vemos si existe un elemento con la clave 1: treeMap.containsKey(1) =
"+treeMap.containsKey(1));
System.out.println("Vemos si existe el valo 'Villa' en el Map: treeMap.containsValue("Villa")
= "+treeMap.containsValue("Villa"));
System.out.println("Vemos si existe el valo 'Ricardo' en el Map:
treeMap.containsValue("Ricardo") = "+treeMap.containsValue("Ricardo"));
System.out.println("Borramos todos los elementos del Map: treeMap.clear()");treeMap.clear();
System.out.println("Comprobamos si lo hemos eliminado viendo su tamao: treeMap.size() =
"+treeMap.size());
System.out.println("Lo comprobamos tambien viendo si esta vacio treeMap.isEmpty() =
"+treeMap.isEmpty());
pdfcrowd.com
Otra de las cosas ms tiles al trabajar con los Map es el recorrerlos como si fuese un ArrayList, y eso lo
conseguimos de la siguiente forma. Si queremos obtener los pares clave/valor o solo las claves o los valores por
separado (cuidado ahora estamos trabajando con el LinkedHashMap del ejemplo):
System.out.println("Foreach: Forma alternativa para recorrer los Map mostrando la Clave y el
valor:");
for (Entry<Integer, String> jugador : linkedHashMap.entrySet()){
Integer clave = jugador.getKey();
String valor = jugador.getValue();
System.out.println(clave+" -> "+valor);
}
Como salida a este fragmento de cdigo tenemos lo siguiente (que son a los jugadores por orden de insercin en
el Map):
Foreach: Forma alternativa para recorrer los Map mostrando la Clave y el valor:
1 -> Casillas
15 -> Ramos
3 -> Pique
5 -> Puyol
11 -> Capdevila
open in browser PRO version
pdfcrowd.com
14
16
8
18
6
7
->
->
->
->
->
->
Xabi Alonso
Busquets
Xavi Hernandez
Pedrito
Iniesta
Villa
Como vemos, lo que hace este foreach es ir dndonos uno a uno cada par clave valor. Por tanto, si obtuvisemos
solo el valor, tendramos el mismo efecto que si estuvisemos trabajando con ArrayList o Colecciones.
Visto las 3 clases ms utilizadas del los Map y los mtodos ms importantes, vamos a poner un ejemplo ms de
como trabajar con los Map. Pero en esta ocasin el valor no ser un objeto predefinido de Java, sino que ser un
objeto de la clase JugadorSeleccion que mostramos a continuacin:
class JugadorSeleccion {
private int dorsal;
private String nombre;
private String demarcacion;
public JugadorSeleccion() {
}
public JugadorSeleccion(int dorsal, String nombre, String demarcacin) {
this.dorsal = dorsal;
this.nombre = nombre;
this.demarcacion = demarcacin;
}
public int getDorsal() {
return dorsal;
}
public void setDorsal(int dorsal) {
this.dorsal = dorsal;
open in browser PRO version
pdfcrowd.com
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getDemarcacin() {
return demarcacion;
}
public void setDemarcacin(String demarcacin) {
this.demarcacion = demarcacin;
}
@Override
public String toString() {
return this.dorsal+"
}
--
"+this.nombre+"
--
"+this.demarcacion;
En este ejemplo nos vamos a crear un TreeMap en la que la clave ser el nombre del jugador y el valor ser un
objeto de la clase JugadorSeleccion. El TreeMap lo declaramos de la siguiente forma y metemos en l los
siguientes objetos:
System.out.println("********* TreeMap con Objetos y como Clave un String *********");
Map <String, JugadorSeleccion> jugadores = new TreeMap<String, JugadorSeleccion>();
jugadores.put("Casillas", new JugadorSeleccion(1, "Casillas", "Portero"));
jugadores.put("Ramos", new JugadorSeleccion(15, "Ramos", "Lateral Derecho"));
jugadores.put("Pique", new JugadorSeleccion(13, "Pique", "Central"));
jugadores.put("Puyol", new JugadorSeleccion(5, "Puyol", "Central"));
open in browser PRO version
pdfcrowd.com
Si hacemos un foreach de este TreeMap, vamos a ver que el Map va a estar ordenado por orden alfabtico de la
clave. Es decir, por el nombre de los jugadores:
for (Entry<String, JugadorSeleccion> jugador : jugadores.entrySet()){
String clave = jugador.getKey();
JugadorSeleccion valor = jugador.getValue();
System.out.println(clave+" -> "+valor.toString());
}
->
->
->
->
->
->
->
->
->
->
->
16
11
1
6
18
13
5
15
7
14
8
------------
Busquets
Capdevila
Casillas
Iniesta
Pedrito
Pique
Puyol
Ramos
Villa
Xabi Alonso
Xavi Hernandez
------------
Medio Centro
Lateral Izquierdo
Portero
Interior Derecho
Interior Izquierdo
Central
Central
Lateral Derecho
Delantero
Medio Centro
Centro Campista
Si nos definimos nuestras propias clases y trabajamos con ellas en los Map, hay que tener muy claro una
importante premisa en la programacin No es lo mismo Iguales que Lo mismo . Esto quiere decir, que si
open in browser PRO version
pdfcrowd.com
nos creamos un nuevo objeto de la clase JugadorSeleccin cuyos atributos son Iguales que un objeto que se
encuentre en el Map y ejecutamos el mtodo ContainsValue nos devolver un false como una casa. Porque
aunque sean objetos iguales, no son los mismo objetos, y por tanto, no lo contendr el Map. Es decir, que si
hacemos lo siguiente nos devolver un false, debido a que nuestro objeto villla no ser el mismo que est en el
Map:
// Cuidado con comparar objetos que son iguales pero no son lo mismo
JugadorSeleccion villa = new JugadorSeleccion(7, "Villa", "Delantero");
System.out.println("Esta este objeto 'villa' en el Map: jugadores.containsValue(villa) =
"+jugadores.containsValue(villa));
En cambio, si ejecutamos lo que viene a continuacin, estaremos preguntando por un objeto que s que est dentro
del Map:
// En este caso si que estamos preguntando por el mismo objeto
JugadorSeleccion navas = new JugadorSeleccion(22, "Navas", "Extremo Derecho");
jugadores.put("Navas", navas);
System.out.println("Esta este objeto 'navas' en el Map: jugadores.containsValue(navas) =
"+jugadores.containsValue(navas));
En lo relacionado con trabajar con objetos propios es lo nico en lo que hay que tener cuidado. Aunque los que
estis acostumbrados a programar en lenguajes como C o C++ en los que hay que tener muchsimo cuidado con
open in browser PRO version
pdfcrowd.com
los punteros, sto lo tendris ms que superado. Sobre el resto de mtodos, a la hora de trabajar con objetos
propios, no hay mucho ms que decir.
Cualquier duda sobre los Map, no dudis en preguntarla dejando un comentario en la entrada o en el Foro.
Recomendados
Enum (Enumerados) en
Java, con ejemplos
Polimorfismo en Java
(Parte I), con ejemplos
Map en Java, con ejemplos por "www.jarroba.com" esta bajo una licencia Creative Commons
Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License. Creado a partir de la obra en
www.jarroba.com
pdfcrowd.com
1.
carlos dice:
19/05/2016 a las 00:07
como podria hacer un modificar en hashmap
Responder
2.
kahmra dice:
21/12/2015 a las 02:31
Hola gracias por tus tutoriales, tengo las sigueinte duda, he creado el siguiente mapa Mapa<Integer,Clase> y
dentro de mi clase tengo Un arraylist, sin embargo cuando llamo este arraylist desde donde sea slo me
devuelve el ltimo arraylist insertado, qu puedo hacer?
Responder
1.
kahmra dice:
21/12/2015 a las 02:34
Nada, que lo he conseguido slo deba hacer nombreArrayList = new ArrayList<Double>();
Responder
3.
Salva dice:
17/12/2015 a las 12:23
pdfcrowd.com
Hola a todos:
Mi problema es que me interesa recorrer slo una parte de un hashmap, desde una posicin a otra. Pero
no se cmo debo recorrerlo. Alguno me prodra echar una mano?
Intento hacer esto pero no me saca bien los valores:
private static Map<Integer, Tema> temasDB = new ConcurrentHashMap<Integer, Tema>();
..
//inicio es el valor desde el que quiero emprezar
for (int i = inicio; i < temasDB.size(); i++) {
resultado += temasDB.get(i) + ". " + temasDB.values().toArray()[i] + "\n";
}
Gracias de antemano.
Responder
1.
pdfcrowd.com
Obtienes Set que contiene Entry con que son objetos Pojo de clave y valor. De este modo puedes
trabajar como si fuera un listado.
Tambin puedes convertirlo en Array con:
miHashMap.entrySet().toArray()
Responder
4.
pdfcrowd.com
5.
Miguel dice:
12/10/2015 a las 17:16
Realmente buena y clara la explicacio, y una fuente de ideas genial.
Gracias
Responder
6.
Edinson R. dice:
16/09/2015 a las 12:53
Muchas gracias por la Informacin.
Responder
7.
Mariano dice:
12/09/2015 a las 20:10
Buen material, se agradece!
Responder
8.
sergi dice:
31/08/2015 a las 12:39
pdfcrowd.com
Hola, felicidades por las explicaciones, son muy claras. Tengouna duda. Estoy intentando convertir un map en
un set pero me veo incapaz.
He hecho un bucle, recorriendo los values del map, ahora pretendo instanciar un set para ir llenando el set con
todos sus valores. Como puedo hacerlo?
Gracias y un saludo
Responder
1.
9.
brigge dice:
27/06/2015 a las 20:22
buenas tardes porfavor me pueden ayudar indicandome como puedo hacer para obtener una funcion
llamando al parametro q e creado en hash map
Responder
1.
pdfcrowd.com
10.
Raquel dice:
28/03/2015 a las 02:02
Gracias por esta soberbia explicacin de la interface Map. Buscando en ingls y resulta que ni punto de
comparacin con lo que he encontrado en vuestra pgina. Aunque he de decir que ya os conoca: explicasteis
como nadie lo que es el polimorfismo y qu decir de los threads Impagable.
Quisiera dejaros un apunte (constructivo) por si quereis tomarlo en consideracin: cuando bajas el cdigo y lo
abres en eclipse salta el error de los acentos. Es fcil corregirlo, pero a lo mejor alguna persona no lo ve tan
fcil. Y hablo por mi cuando comenzaba en esto, cualquier error del editor recuerdo que era un mundo.
1.
pdfcrowd.com
Gracias Raquel por el apunte, era algo que no habamos visto, lo corregiremos.
Responder
11.
Ana dice:
20/03/2015 a las 18:05
Hola,
Slo quera agradecer las aportaciones tan valiosas y desinteresadas que hacis para la gente que
empezamos en el mundo de java.
Sois unos fieras, tan jvenes y tanto conocimiento
Mis ms sinceras felicitaciones.
Responder
1.
12.
Josh dice:
23/02/2015 a las 18:19
pdfcrowd.com
Excelente explicacin, en caso de querer leer desde un archivo .txt los nombres delos jugadores que
procedimiento seria utilizando los maps, espero me resuelvan esa duda, saludos.
excelente blog.
Responder
1.
13.
Ceci dice:
13/02/2015 a las 02:34
Mil gracias muchachos! me ha servido mucho
Responder
14.
pdfcrowd.com
Responder
1.
15.
Janier dice:
31/12/2014 a las 05:44
Excelente explicacin!!
Como puedo imprimir los datos de un valor a partir de su clave especfica Tomando en cuenta que los
valores son Tipo objeto.
Gracias!
Responder
1.
pdfcrowd.com
SL2
Responder
1.
CROBER dice:
12/05/2016 a las 19:48
YO CREO QUE LA MEJOR FORMA ES QUE SE AGA ANGO SENCILLO AMIGOS
Responder
16.
Jordi dice:
24/11/2014 a las 13:17
Buen trabajo chicos!!!!
Slo comentaros que la Clase HashMap como bien comentis no acepta claves duplicadas aunque si acepta
null (slo aceptara uno porqu el segundo seria una duplicidad) y SI acepta null en lo referente a los valores,
sin limitaciones.
pdfcrowd.com
1.
17.
pdfcrowd.com
no se encotraron registros
Responder
1.
18.
Mary dice:
11/09/2014 a las 05:28
Buenas tardes, me encant las explicaciones, estoy comenzando en el mundo java y la verdad que me cuesta
pdfcrowd.com
1.
19.
pdfcrowd.com
Responder
1.
2.
horv dice:
11/09/2014 a las 17:20
Buenas: si quieres ordenar objetos solo tienes que implementar la interfaz Comparable y definir el
mtodo compareTo() en la clase correspondiente; por ejemplo, para una clase MyTime:
@Override //compareTo
pdfcrowd.com
1.
horv dice:
11/09/2014 a las 17:31
Al copiar y pegar el cdigo se ha perdido mucho texto, a ver si funciona ahora:
@Override //compareTo
public int compareTo(MyTime f) {
if(this.hour > f.hour) {
return 1;
}
else if(this.hour f.minute) {
return 1;
}
pdfcrowd.com
1.
horv dice:
11/09/2014 a las 17:32
Pues no, sigue pasando lo mismo; espero que an as puedas orientarte. Un saludo y
disculpa de nuevo.
Responder
20.
Kevin dice:
17/06/2014 a las 23:23
hola, queria saber como puedo insertar objetos tanto el la clave como en el valor(bueno uno puede ser string),
nesesito hacer un diccionario, y como puedo ordenarlos en base a un atributo del objeto, o de su clave,
gracias
pdfcrowd.com
Responder
1.
Responder
pdfcrowd.com
21.
Willandher dice:
23/05/2014 a las 02:27
Buenas noches, quisiera saber si hay alguna forma de que el mapa almacene los valores de manera
permanente en el programa es decir que funcione como una Session en java, de tal forma que pueda ser
usado tambien en otra clase ademas de la misma de donde esta siendo usada gracias
Responder
1.
1.
maria dice:
24/03/2015 a las 11:57
Como se implementa eso en cdigo en Java?
pdfcrowd.com
Gracias
Responder
1.
22.
1.
pdfcrowd.com
Map filmo;
Responder
1.
23.
Jos dice:
10/03/2014 a las 19:35
Buen trabajo. Seguir as. Me encanta vuestra web.
Saludos de otro nuevo seguidor.
Responder
pdfcrowd.com
24.
salva dice:
01/03/2014 a las 17:57
He descubierto hoy vuestra web y me parece que, con diferencia, le dais mil vueltas al resto de webs que
intentan explicar cosas de java.(An no he visto las entradas que tenis de Android pero imagino que
seguirn la misma lnea)
Explicaciones entendibles y con cdigo que funciona!! Parecer una tontera, pero no es nada fcil de
encontrar.
Enhorabuena, os animo a que sigis destripando java de la forma en la que lo estis haciendo.
Saludos de un nuevo seguidor!!
Responder
1.
pdfcrowd.com
Deja un comentario
Tu direccin de correo electrnico no ser publicada. Los campos obligatorios estn marcados con *
Nombre *
Correo electrnico *
Web
Publicar comentario
pdfcrowd.com
Siguenos en:
Contacto: jarrobaweb@gmail.com
FAQ
Visitas
Gastos
Site-Map
Copyright 2016 Jarroba.com - Todos los derechos reservados
Uso de cookies
Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si contina navegando est dando su consentimiento para la aceptacin de las mencionadas cookies y la aceptacin de nuestra
poltica
de cookies
ACEPTAR
pdfcrowd.com