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.