Curso de Java | Map – diccionarios en Java

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

La Interfaz Map (java.io.Map) de Java, nos da una estructura de datos que nos permitirá almacenar pares clave/valor. Esto significa que cada valor será identificado con una clave, y cada clave sólo tendrá asociado un valor. En otros lenguajes, estas estructuras son llamadas «Diccionarios», aunque en cada lenguajes esta estructura de datos tiene sus matices.

Declaración de un Map

Map<String, String> map = new HashMap();
map.put("75367834E", new Student("Pablo", 27));

Tipos más importantes de maps:

  • HashMap: Los elementos que inserta en el map no tendrán un orden específico. No aceptan claves duplicadas ni valores nulos.
  • TreeMap: Los elementos del map tendrán un orden «natural». Por ejemplo, si la clave son valores enteros, serán ordenados de menos a mayor. Si son variables de texto, el orden será alfabético.
  • LinkedHashMap: Los elementos del map serán ordenados en su orden de insercción. Esta clase es más lenta que las otras a la hora de realizar búsquedas.

Métodos de la interfaz Map

myMap.size(); // Devuelve el numero de elementos del Map
myMap.isEmpty(); // Devuelve true si no hay elementos en el Map y false si si los hay
myMap.put("68274736E", "Paco Soria"); // Añade un elemento al Map
myMap.get("68274736E"); // Devuelve el valor de la clave que se le pasa como parámetro o 'null' si la clave no existe
myMap.clear(); // Borra todos los componentes del Map
myMap.remove("68274736E"); // Borra el par clave/valor de la clave que se le pasa como parámetro
myMap.containsKey("68274736E"); // Devuelve true si en el map hay una clave que coincide con K
myMap.containsValue("Paco Soria"); // Devuelve true si en el map hay un Valor que coincide con V
myMap.values(); // Devuelve una "Collection" con los valores del Map

Recorrer un map

Usando iterator

El método keySet() devuelve un set de claves. Luego, recuperaré los valores del map utilizando las claves que acabo de almacenar en el Set.

Collection <String> dnis = map.keySet();
Iterator <String> it = dnis.iterator();
while(it.hasNext()){
  String dni = it.next();
  Student student = map.get(dni);
  System.out.println("DNI: " + dni + " -> Nombre: " + student.getName());
}

Transformar un Map en una Collection

Collection <Student> students = map.values();
Iterator <Student> it = students.iterator();
while(it.hasNext()){
	Student student = it.next();
	System.out.println(student.getName());
}

Recorrer un Map usando el bucle for

Collection <String> dnis = map.keySet();
for (String dni: dnis){
	Student student = map.get(dni);
	System.out.println("Name => " + student.getName());
}
Collection <Student> students = map.values();
for (Student student: students){
        System.out.println( "Student: " +student.getName());
}

Ejercicio Juego de la Oca

Crearemos las instancias de los jugadores pertinentes y los introduciremos en un ArrayList de jugadores. Los jugadores irán tirando el dado y avanzando casillas hasta que alguno llegue a la casilla 63.
Tener en cuenta que:

Hacer el juego de la oca. El juego constará de una clase Main desde la que se ejecuta el juego y un bean »Jugador» con los atributos:

  • nombre(String)
  • casilla (int)
  • turnosRestantes (int)

Al comenzar la aplicación se nos solicitará indicar el número de jugadores. Crearemos las instancias de los jugadores pertinentes y los introduciremos en un ArrayList de jugadores. Los jugadores irán tirando el dado y avanzando casillas hasta que alguno llegue a la casilla 63.
Tener en cuenta que:

  • las posiciones 5, 9, 14, 18, 23, 27, 32, 36, 41, 45, 50, 54 y 59 corresponden a las ocas. Si el jugador cae en ellas se imprimirá el texto »De oca a oca y tiro porque me toca», el jugador avanzará hasta la siguiente casilla de la oca y volverá a tirar. Para programar esto, una buena idea sería tener un HashMap en el que la clave sería la casilla en la que ha caído el jugador y el valor sería la casilla de destino. Luego, llamando al método hashmap.containsKey(posicion) evaluaremos si el jugador ha caído en una casilla con oca, y si es así, recuperaremos la correspondiente casilla de destino.
  • si el jugador cae en la casilla 19, caerá en la pensión y no podrá tirar el dado en los dos siguientes turnos.
  • si el jugador cae en la casilla 3, caerá en el pozo y no podrá tirar el dado en el siguiente turno.
  • si el jugador cae en la casilla 52, caerá en la cárcel y no podrá tirar el dado en los tres siguientes turnos.
  • las casillas 6 y 12 son puentes. Si el jugador cae en ellas se imprimirá el texto »De puente a puente y tiro porque me lleva la corriente». En este caso, si cayó en la casilla 6 irá a la 12 y si cayó en la 12 irá a la 6. En ambos casos, volverá a tirar.
  • las casillas 26 y 53 son dados. Si el jugador cae en ellas se imprimirá el texto »De dado a dado y tiro porque me ha tocado». En este caso, si cayó en la casilla 26 irá a la 53 y si cayó en la 53 irá a la 26. En ambos casos se volverá a tirar.
  • la casilla 58 es la muerte, el jugador que cae en ella pierde.(aunque en el juego original lo que ocurría era que el jugador debía regresar a la casilla 1).

1. Se solicita al usuario el número de jugadores que participarán.

2. En función de la cantidad de jugadores, se alimenta una

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.