Создать карту на Java

85

Я хочу создать объект map, содержащий записи, состоящие из(int, Point2D)

Как я могу сделать это на Java?

Я безуспешно пробовал следующее.

HashMap hm = new HashMap();

hm.put(1, new Point2D.Double(50, 50));
Кевин Мередит
источник

Ответы:

117
Map <Integer, Point2D.Double> hm = new HashMap<Integer, Point2D>();
hm.put(1, new Point2D.Double(50, 50));
hd1
источник
8
Вы также должны сделать import java.util.Map; import java.util.HashMap;илиimport java.util.*;
Макс
21

Есть даже лучший способ создать карту вместе с инициализацией:

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

Дополнительные параметры см. Здесь. Как я могу инициализировать статическую карту?

webdizz
источник
4
Это действительно плохой способ инициализировать карту.
Као,
1
@Kao Почему? Он просто визуально содержит операцию, в остальном он идентичен главному ответу на этот вопрос.
Энтони Мансур,
5
Нет, это не так. Это инициализация двойных скобок, которая, вообще говоря, является анти-шаблоном. Вот почему .
Као
18

Java 9

public static void main(String[] args) {
    Map<Integer,String> map = Map.ofEntries(entry(1,"A"), entry(2,"B"), entry(3,"C"));
}
Дургпал Сингх
источник
9
Map<Integer, Point2D> hm = new HashMap<Integer, Point2D>();
Ахром
источник
Point2D.Doubleне выглядит как Point2D= \
Луиджи Мендоза
используя Map<int, Point2D> hm = new HashMap<int, Point2D>(), я получаю эту ошибку: Синтаксическая ошибка токена «int», ожидаемые размеры после этого токена.
Кевин Мередит
Забыл, что карты Java не поддерживают примитивные типы. Исправлено.
Achrome
но мне нужен Point2D как значение в [ключ, значение]. : /
Кевин Мередит
Именно об этом я писал изначально.
Achrome
1

Я использую такую ​​популяцию карт благодаря Java 9. По моему честному мнению, такой подход обеспечивает большую читабельность кода.

  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);
  }
Юлиан Колодзей
источник
1

В более новых версиях Java ( например, Java 9 и новее ) вы можете использовать:

Map.of(1, new Point2D.Double(50, 50), 2, new Point2D.Double(100, 50), ...)

в общем:

Map.of(Key1, Value1, Key2, Value2, KeyN, ValueN)

Однако имейте в виду, что это Map.ofработает только для большинства 10 записей, если у вас больше 10записей, которые вы можете использовать:

Map.ofEntries(entry(1, new Point2D.Double(50, 50)), entry(2,  new Point2D.Double(100, 50)), ...);
крушение мечты
источник