【问题标题】:HashMap initialization in javajava中的HashMap初始化
【发布时间】:2015-01-15 22:58:09
【问题描述】:

我有一个关于HashMap 创建的问题。有没有简单快捷的HashMap创建方式?也许,两个数组{1, 2, ...}{"picture/one.png", "picture/two.png", ...} 的串联。 我对一个简洁的解决方案感兴趣。最佳实践,可以这么说。

每一个指导或提示都会非常有帮助。谢谢。

编辑:是的,我知道如何发起HashMap。我查看了javadoc(甚至没有一次)。 抱歉我的问题解释不好,也许不是很清楚。再一次,我对最佳实践解决方案感兴趣。如果最佳实践解决方案是 for 循环,就是这样。如果还有其他选择,请出示。

【问题讨论】:

标签: java hashmap


【解决方案1】:

是的,有可能:

public static <K,V> Map<K,V> mapFromArrays(K[] keys,V[]values){
    HashMap<K, V> result=new HashMap<K, V>();
    for(int i=0;i<keys.length;i++){
        result.put(keys[i], values[i]);
    }
    return result;

}

假设键和值的长度相同。

你也可以像这样在静态初始化器中使用这个函数:

private static Integer[] keys=new Integer[]{1,2,3};
private static String[] values=new String[]{"first","second","third"};

private static Map<Integer,String> myMap;
{
    myMap=mapFromArrays(keys, values);
}

【讨论】:

  • 我认为这个问题更多地与声明性表示有关,而不是实际功能......
  • 这个问题与整洁快速的解决方案有关,可以说是最佳实践。
  • k_wave, +1 我使用了你的方法循环方法并在构造函数中而不是在块中启动它,因为我需要 HashMap 是最终的。
  • 对这个解决方案的轻微改进可能是将其更改为“allAll”函数(返回地图本身)而不是“新对象”函数。成为&lt;K,V&gt; Map&lt;K,V&gt; addAllFromArrays(Map&lt;K,V&gt; result, K[] keys,V[] values) 并使用myMap = addAllFromArrays(new HashMap&lt;Integer, String&gt;(), keys, values)。它允许选择 Map 的类型,而且它扩展了它的用途(到 addAll 需要/将)。
【解决方案2】:

简短的回答是否定的。但是,您可以接近在静态实用程序函数中使用可变参数。

没有错误检查,也没有泛型:

public static Map kvPairsToMap(Object...args) {
   // TODO check that args has an even length
   Map map = new HashMap();
   for (int i=0; i<args.length; i+=2) {
      map.put(args[i], args[i+1]);
   }

   return map;
}

用法是

Map dic = kvPairsToMap(1,"picture/one.png", 2,"picture/two.png", ...);

【讨论】:

  • @zds 谢谢。您可以对其他键值对(例如 HTTP 标头、查询等)执行类似的 varargs 技巧...
【解决方案3】:

在这种情况下,有一种使用匿名子类创建 HashMap 的好方法,请参见下面的示例:

     Map<Integer, String> map = new HashMap<Integer, String>() {{
     put(1,"picture/one.png");
     put(2,"picture/two.png");
     put(3,"picture/three.png");
    }};

来源:Ways For Creating HashMap

【讨论】:

    【解决方案4】:

    当键和值都是字符串时,这是一种使用变量声明来初始化映射的方法。

    首先声明一个二维字符串数组。使用大括号表示法初始化数组,如

    final static String [][] animalEatsArray = {{"mouse", "cheese"}, {"dog", "bone"}};
    

    然后声明并初始化地图:

    final static Map animalEatsMap = buildMapFromStringArray(animalEatsArray );
    

    你在某处需要这样的方法:

    public static Map<String, String> buildMapFromStringArray( String [] [] stringArray) {
    
        if (stringArray == null ) {
            throw new IllegalArgumentException("buildMapFromStringArray: stringArray is null");
        }
    
        Map<String, String> map = new HashMap<String, String>( 1 + (2 * stringArray.length) ); 
    
        for ( String[] keyValue : stringArray) {
            map.put(keyValue[0], keyValue[1]);
        }
    
        return map;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-06
      • 2016-08-25
      • 2014-07-17
      • 1970-01-01
      • 2015-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多