java中的HashMap初始化

java中的HashMap初始化,java,hashmap,Java,Hashmap,我有一个关于HashMap创建的问题。是否有一种简单而快速的HashMap创建方法?可能,两个数组的串联{1,2,…}和{“picture/one.png”,“picture/two.png”,“…}。 我对一个简洁的解决方案感兴趣。可以说是最佳实践 每一个指导或暗示都会很有帮助。谢谢 编辑:是的,我知道如何启动HashMap。我查看了javadoc(甚至一次也没有)。 对不起,我的问题解释得不好,可能不是很清楚。再一次,我对最佳实践解决方案感兴趣。如果最佳实践解决方案是for循环,那么就是这样

我有一个关于
HashMap
创建的问题。是否有一种简单而快速的
HashMap
创建方法?可能,两个数组的串联
{1,2,…}
{“picture/one.png”,“picture/two.png”,“…}
。 我对一个简洁的解决方案感兴趣。可以说是最佳实践

每一个指导或暗示都会很有帮助。谢谢

编辑:是的,我知道如何启动
HashMap
。我查看了javadoc(甚至一次也没有)。 对不起,我的问题解释得不好,可能不是很清楚。再一次,我对最佳实践解决方案感兴趣。如果最佳实践解决方案是for循环,那么就是这样。如果有其他选项,请显示。

是,可以:

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;

}
公共静态映射MapFromArray(K[]键,V[]值){
HashMap结果=新建HashMap();

对于(inti=0;i来说,简短的答案是否定的。但是,您可以在静态实用程序函数中使用varargs

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

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;
}

下面是一种在键和值为字符串时使用变量声明初始化映射的方法

首先声明一个二维字符串数组

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;
}
公共静态映射buildMapFromStringArray(字符串[][]stringArray){
if(stringArray==null){
抛出新的IllegalArgumentException(“buildMapFromStringArray:stringArray为null”);
}
Map Map=newhashmap(1+(2*stringArray.length));
for(字符串[]键值:stringArray){
map.put(keyValue[0],keyValue[1]);
}
返回图;
}

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

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

来源:

不,你不能。使用一个合适的类构造函数。但是创建一个通用/静态方法来获取这样一个字符串并返回用数据项创建的hashmap并不难。你可以参考这篇文章或这篇文章。我相信这个问题更像是一个声明式表示,而不是一个真正有趣的问题Action…这个问题与简洁快速的解决方案、最佳实践有关,也就是说,k_wave,+1我使用了你的循环方法,并在构造函数中启动它,而不是在块中,因为我需要HashMap作为最终解决方案。这个解决方案的一个轻微改进是将其更改为“allAll”函数(返回映射本身),而不是“new object”函数。成为
Map AddAllFromArray(映射结果,K[]键,V[]值)
并使用
myMap=addAllFromArrays(new HashMap(),键,值)
。它允许选择映射的类型,还扩展了它的用途(以满足所有需要/需要)@zds谢谢。您可以对其他键值对执行类似的varargs技巧,例如HTTP头、查询等。。。
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;
}
     Map<Integer, String> map = new HashMap<Integer, String>() {{
     put(1,"picture/one.png");
     put(2,"picture/two.png");
     put(3,"picture/three.png");
    }};