用Java创建地图

Kev*_*ith 68 java map

我想创建一个map包含条目的条目(int, Point2D)

我怎么能用Java做到这一点?

我尝试了下面的失败.

HashMap hm = new HashMap();

hm.put(1, new Point2D.Double(50, 50));
Run Code Online (Sandbox Code Playgroud)

hd1*_*hd1 98

Map <Integer, Point2D.Double> hm = new HashMap<Integer, Point2D>();
hm.put(1, new Point2D.Double(50, 50));
Run Code Online (Sandbox Code Playgroud)

  • 你还必须做`import java.util.Map; import java.util.HashMap;`或`import java.util.*;` (4认同)

小智 17

甚至有更好的方法来创建Map以及初始化:

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

有关更多选项,请查看此处如何初始化静态地图?

  • 不,这不对。它是一个双括号初始化,一般来说是一种反模式。[这就是原因](https://blog.jooq.org/2014/12/08/dont-be-clever-the-double-curly-braces-anti-pattern/)。 (12认同)
  • 这是一种非常糟糕的初始化地图的方式。 (7认同)
  • @Kao 为什么?这只是在视觉上包含操作,否则与此问题的最佳答案相同。 (2认同)

Dur*_*ngh 9

Java 9

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


Ach*_*ome 8

Map<Integer, Point2D> hm = new HashMap<Integer, Point2D>();
Run Code Online (Sandbox Code Playgroud)


小智 6

多亏了 Java 9,我才使用了这种 Map 填充。在我看来,这种方法为代码提供了更多的可读性。

  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);
  }
Run Code Online (Sandbox Code Playgroud)


dre*_*ash 6

使用较新的 Java 版本( Java 9 及更高版本),您可以使用:

Map.of(1, new Point2D.Double(50, 50), 2, new Point2D.Double(100, 50), ...)
Run Code Online (Sandbox Code Playgroud)

一般:

Map.of(Key1, Value1, Key2, Value2, KeyN, ValueN)
Run Code Online (Sandbox Code Playgroud)

但是请记住,如果您有多个可以使用的条目,则Map.of仅适用于最多 10条目10

Map.ofEntries(entry(1, new Point2D.Double(50, 50)), entry(2,  new Point2D.Double(100, 50)), ...);
Run Code Online (Sandbox Code Playgroud)