Создать карту на 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));

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");
    }
};

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


4
Это действительно плохой способ инициализировать карту.
Као,

1
@Kao Почему? Он просто визуально содержит операцию, в остальном он идентичен главному ответу на этот вопрос.
Энтони Мансур,

5
Нет, это не так. Это инициализация двойных скобок, которая, вообще говоря, является анти-шаблоном. Вот почему .
Као


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)), ...);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.