Crear mapa en Java


84

Me gustaría crear un mapque contenga entradas que constan de(int, Point2D)

¿Cómo puedo hacer esto en Java?

Intenté lo siguiente sin éxito.

HashMap hm = new HashMap();

hm.put(1, new Point2D.Double(50, 50));

su hm.put se parece más a unMap<Integer, Double>
— Luiggi Mendoza


1
¿Qué quieres decir con no tener éxito?
— texasbruce

Respuestas:


115
Map <Integer, Point2D.Double> hm = new HashMap<Integer, Point2D>();
hm.put(1, new Point2D.Double(50, 50));

8
También debe hacer import java.util.Map; import java.util.HashMap;oimport java.util.*;
— Máximo

19

Existe incluso una forma mejor de crear un mapa junto con la inicialización:

Map<String, String> rightHereMap = new HashMap<String, String>()
{
    {
        put("key1", "value1");
        put("key2", "value2");
    }
};

Para ver más opciones, eche un vistazo aquí. ¿Cómo puedo inicializar un mapa estático?


4
Esta es una forma realmente mala de inicializar un mapa.
— Kao

1
@Kao ¿Por qué? Esto solo contiene visualmente la operación; de lo contrario, es idéntica a la respuesta principal de esta pregunta.
— Anthony Mansour

5
No, no es. Es una inicialización de doble llave, que es, en términos generales, un anti-patrón. He aquí por qué .
— Kao

18

Java 9

public static void main(String[] args) {
    Map<Integer,String> map = Map.ofEntries(entry(1,"A"), entry(2,"B"), entry(3,"C"));
}

8
Map.of(1, "A", 2, "B", 3, "C")es mejor
— ZhekaKozlov


@ZhekaKozlov Traté de usar Map.of, cuando ejecuto la prueba dice que no pude encontrar el símbolojava: cannot find symbol symbol: method of(java.lang.String,double) location: interface java.util.Map
— soMuchToLearn

@soMuchToLearn ¿Qué versión de Java usas? Correrjava -version
— ZhekaKozlov

java 11, @ZhekaKozlovopenjdk 11.0.8 2020-07-14 OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu120.04) OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu120.04, mixed mode, sharing)
— soMuchToLearn

9
Map<Integer, Point2D> hm = new HashMap<Integer, Point2D>();

Point2D.Doubleno parece un Point2D= \
— Luiggi Mendoza

usando Map<int, Point2D> hm = new HashMap<int, Point2D>(), obtengo este error: Error de sintaxis en el token "int", Dimensiones esperadas después de este token.
— Kevin Meredith

Olvidé que los mapas de Java no admiten tipos primitivos. Arreglado eso.
— Achrome

pero necesito Point2D como valor en [clave, valor]. : /
— Kevin Meredith

Eso fue lo que escribí inicialmente.
— Achrome

1

Utilizo este tipo de población de mapas gracias a Java 9. En mi sincera opinión, este enfoque proporciona más legibilidad al código.

  public static void main(String[] args) {
    Map<Integer, Point2D.Double> map = Map.of(
        1, new Point2D.Double(1, 1),
        2, new Point2D.Double(2, 2),
        3, new Point2D.Double(3, 3),
        4, new Point2D.Double(4, 4));
    map.entrySet().forEach(System.out::println);
  }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.