【问题标题】:Create Map in Java在 Java 中创建地图
【发布时间】:2013-01-22 12:05:39
【问题描述】:

我想创建一个 map,其中包含由 (int, Point2D) 组成的条目

如何在 Java 中做到这一点?

我尝试了以下失败。

HashMap hm = new HashMap();

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

【问题讨论】:

    标签: java map


    【解决方案1】:
    Map <Integer, Point2D.Double> hm = new HashMap<Integer, Point2D>();
    hm.put(1, new Point2D.Double(50, 50));
    

    【讨论】:

    • 你也必须这样做import java.util.Map; import java.util.HashMap;import java.util.*;
    【解决方案2】:

    还有一种更好的方法可以在初始化的同时创建地图:

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

    更多选项请看这里How can I initialise a static Map?

    【讨论】:

    • 这是一种非常糟糕的初始化地图的方式。
    • @Kao 为什么?这只是视觉上包含操作,否则它与此问题的最佳答案相同。
    • 不,不是。它是一个双括号初始化,一般来说,它是一种反模式。 Here is why.
    • 这是一个奇怪的代码,我同意。
    【解决方案3】:

    Java 9

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

    【讨论】:

      【解决方案4】:

      对于较新的 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)), ...);
      

      【讨论】:

        【解决方案5】:
        Map<Integer, Point2D> hm = new HashMap<Integer, Point2D>();
        

        【讨论】:

        • Point2D.Double 看起来不像 Point2D =\
        • 使用Map&lt;int, Point2D&gt; hm = new HashMap&lt;int, Point2D&gt;(),我收到此错误:令牌“int”上的语法错误,此令牌后应有尺寸。
        • 忘记了 Java 映射不支持原始类型。解决了这个问题。
        • 但我需要 Point2D 作为 [key, value] 中的值。 ://
        • 那是我最初写的。
        【解决方案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);
          }
        

        【讨论】:

          猜你喜欢
          • 2011-01-30
          • 2011-03-26
          • 2015-03-05
          • 1970-01-01
          • 1970-01-01
          • 2021-07-17
          • 1970-01-01
          • 2010-10-12
          • 1970-01-01
          相关资源
          最近更新 更多