【问题标题】:How do I access individual values within a string array within a Hashmap?如何访问 Hashmap 中字符串数组中的单个值?
【发布时间】:2011-05-20 14:59:05
【问题描述】:

我的地图声明如下:

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

我通过创建几个字符串数组并使用相应的整数将它们放入我的地图中来初始化它。

然后我想遍历地图中我的字符串数组中的所有元素。 我尝试了这两种可能性,但它们没有给我正确的值:

for(int ii =0; ii < 2; ii++)
  System.out.println(((HashMap<Integer, String[]>)mapVar).values().toArray()[ii].toString());

mapVar.values().toString();

我也知道数组和整数可以很好地进入地图,我只是不知道如何访问它们。

谢谢

【问题讨论】:

  • 你的投入、预期产出和实际产出是什么?
  • 字符串“13”、“26”和“14”、“28”我得到 [Ljava.lang.String;@342798e7 和 [Ljava.lang.String;@13a78071
  • 这是String[] 的默认toString() 表示。您想打印单个字符串,而不是数组对象的toString()。看我的回答。
  • 在您愉快地构建仅使用哈希图和数组的数据结构之前,请考虑使用适当的 hashCode 和 equals 实现为您想要保存的数据创建类

标签: java hashmap arrays


【解决方案1】:

试试

for (String[] value : mapvar.values()) {
   System.out.println(Arrays.toString(value));
}

【讨论】:

    【解决方案2】:
    for (String[] strings : mapVar.values()) {
      for (String str : strings) {
         System.out.println(str);
      }
    }
    

    这将打印Map 中所有数组中的所有Strings

    【讨论】:

      【解决方案3】:
      for (Map.Entry<Integer, String[]> entry : mapVar.entrySet()) {
         for (String s : entry.getValue()) {
            // do whatever
         }
      }
      

      【讨论】:

        【解决方案4】:

        如果您希望能够所有访问地图中的String 值作为一个单元而不是处理中间数组,我建议使用Guava Multimap

        ListMultimap<Integer, String> multimap = ArrayListMultimap.create();
        // put stuff in the multimap
        for (String string : multimap.values()) { ... } // all strings in the multimap
        

        当然,您也可以访问与特定键关联的Strings 列表:

        List<String> valuesFor1 = multimap.get(1);
        

        【讨论】:

          猜你喜欢
          • 2010-10-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-03
          • 2021-08-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多