【问题标题】:The way to instantiate map<String, List<String>> in JavaJava中实例化map<String, List<String>>的方法
【发布时间】:2013-08-15 17:44:27
【问题描述】:

我想用 Java 实例化 Map&lt;String, List&lt;String&gt;&gt;

我试过了

Map<String, List<String>> foo = new <String, List<String>>();

Map<String, List<String>> foo = new <String, ArrayList<String>>();

它们都不起作用。有谁知道如何用 Java 实例化这个地图?

【问题讨论】:

    标签: java list map generic-programming


    【解决方案1】:

    你忘了提到班级。 Map 这里是引用类型,是一个接口。 equals 另一边的HashMap 指定创建并分配给引用fooObject实际 类型。

    Map<String, List<String>> foo = new HashMap<String, List<String>>();
    

    指定的实际类型(此处为HashMap)必须可分配到引用类型(此处为Map),即如果引用类型是接口, Object 的类型必须实现它。而且,如果引用的类型是 Class,则 Object 的类型必须是相同的 class 或其 子类型,即从它扩展而来.

    从 Java 7 开始,您可以使用简写形式

    Map<String, List<String>> foo = new HashMap<>();
    

    推荐您的第二种实例化方式。坚持使用List,这是一个接口

    // Don't bind your Map to ArrayList
    new TreeMap<String, ArrayList<String>>();
    
    // Use List interface type instead
    new TreeMap<String, List<String>>();
    

    【讨论】:

      【解决方案2】:

      地图是一个接口。你必须告诉 Java 你想实例化哪个具体的 Map 类。

      Map<String, List<String>> foo = new HashMap<String, List<String>>();
      

      Map<String, List<String>> foo = new TreeMap<String, List<String>>();
      

      等等

      【讨论】:

        【解决方案3】:
        new HashMap<String, List<String>>();
        

        或者正如 gparyani 评论的那样:

        new HashMap<>(); // type inference
        

        注意:需要给每个条目一个实例化的 List 作为值。你不能 get("myKey").add("some_string_for_this_key");您第一次从中获取()列表。

        所以,获取一个列表,检查它是否为空。

        如果它为空,则创建一个新列表,将字符串添加到其中,然后将列表放回原处。 如果它不是 null,请添加它,或者做你想做的事。

        【讨论】:

        • ...或者你可以说 new HashMap&lt;&gt;(); 从 Java 7 开始
        猜你喜欢
        • 2023-04-10
        • 2020-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-02
        • 1970-01-01
        • 2018-02-26
        • 2018-09-06
        相关资源
        最近更新 更多