【问题标题】:Varargs in Java HashMapJava HashMap 中的可变参数
【发布时间】:2018-03-29 07:07:07
【问题描述】:
HashMap <String,String... strings> hm = new HashMap<String,String... strings>();

hm.put("Zara", "Pony","Cars", "Magic");
hm.put("John", "Horse","Flying", "Loving");

我该怎么做?它不让我。

【问题讨论】:

  • 你不能。您需要改用Map&lt;String, String[]&gt;
  • 可变参数仅用于函数参数。您真正想要地图的值是什么?
  • 我想这样做 - 为什么?
  • @ScaryWombat 我最近做了 4 个问题的研究生职位测试,我得到了 0% 的正确率。其中一个问题在测试中有这样的内容。

标签: java dictionary hashmap variadic-functions


【解决方案1】:

省略号 (...) 运算符只能用于方法签名中。您可以显式声明和创建数组:

Map<String, String[]> hm = new HashMap<>();

hm.put("Zara", new String[]{"Pony", "Cars", "Magic"});
hm.put("John", new String[]{"Horse", "Flying", "Loving"});

如果你绝对必须使用可变参数,你可以用你自己的方法包装对Map#put的调用:

public static void main(String[] args) {
    Map<String, String[]> hm = new HashMap<>();

    addToMap(hm, "Zara", "Pony", "Cars", "Magic");
    addToMap(hm, "John", "Horse", "Flying", "Loving");
}

private static void addToMap
    (Map<String, String[]> map, String key, String... values) {
    map.put(key, values);
}

【讨论】:

    【解决方案2】:

    Vararg 表示法仅用于允许它的函数。它不能在其他任何地方使用。

    您必须决定您真正想要的地图值是什么。通常,可变参数基本上是数组的语法糖。但是,ListSet 在这里也有意义。

    以下任何一种都可以:

    1. 数组:

      HashMap <String, String[]> hm = new HashMap<>();
      hm.put("Zara", new String[] {"Pony","Cars", "Magic"});
      hm.put("John", new String[] {"Horse", "Flying", "Loving"});
      
    2. 列表:

      HashMap <String, List<String>> hm = new HashMap<>();
      hm.put("Zara", new ArrayList<String>());
      hm.get("Zara").add("Pony");
      hm.get("Zara").add("Cars");
      hm.get("Zara").add("Magic");
      hm.put("John", new ArrayList<String>());
      hm.get("John").add("Horse");
      hm.get("John").add("Flying");
      hm.get("John").add("Loving");
      

    【讨论】:

    • @BackSlash。接得好。固定的。谢谢。
    【解决方案3】:

    你能做的最接近的就是使用`Map并为此创建一个方法

    public static void addToMap(Map<String, String[]> map, String key, String...values) {
        map.put(key, values);
    }
    

    【讨论】:

      【解决方案4】:

      this question。基本上你需要做到以下几点:

      hm.put("Zara", new String[]{"Pony", "Cars", "Magic"});
      

      或者如果你想单独声明:

      String[] zaraValues = new String[]{"Pony", "Cars", "Magic"};
      hm.put("Zara", zaraValues);
      

      【讨论】:

        【解决方案5】:

        您可能正在寻找这个:

        HashMap<String, List<String>> hm = new HashMap<>();
        hm.put("Zara", Arrays.asList("Pony", "Cars", "Magic"));
        hm.put("John", Arrays.asList("Horse", "Flying", "Loving"));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-05-19
          • 1970-01-01
          • 1970-01-01
          • 2011-01-26
          • 1970-01-01
          • 2014-11-28
          • 1970-01-01
          相关资源
          最近更新 更多