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