Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将arraylist转换为数组?_Java_Arrays_Spring_Collections - Fatal编程技术网

Java 如何将arraylist转换为数组?

Java 如何将arraylist转换为数组?,java,arrays,spring,collections,Java,Arrays,Spring,Collections,我有这个Java的ArrayList- List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); 如果无法创建贴图对象数组,为什么Spring要使用它?那么我们应该如何使用这种方法呢?您可以这样尝试: Map<String, Object> [] mp = list.toArray(new HashMap[list.size()]); Map[]mp

我有这个Java的ArrayList-

List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
如果无法创建贴图对象数组,为什么Spring要使用它?那么我们应该如何使用这种方法呢?

您可以这样尝试:

Map<String, Object> [] mp = list.toArray(new HashMap[list.size()]);
Map[]mp=list.toArray(新的HashMap[list.size()]);
你做不到

toArray(T[]a)是您唯一的选项,但它不适用于 参数化类型,因为它们在运行时未被保留

试试这个

 Map<String,Object>[] ar=list.toArray(new HashMap[list.size()]);
Map[]ar=list.toArray(新的HashMap[list.size()]);
这样做:

Map<String, Object> [] mp = new HashMap[list.size()]; 
list.toArray(mp); 
Map[]mp=newhashmap[list.size()];
列表。toArray(mp);
这个答案有效。我测试过了

我的完整测试代码如下:

import java.util.*;
public class Test {

    public static void main (String [] args) {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("Hello", "World");
        ArrayList<Map<String, Object>> list = new ArrayList<Map <String, Object>>();
        list.add(map);

        Map<String, Object> [] mp = new HashMap[list.size()]; 
        list.toArray(mp);   
        System.out.println(mp[0]);    // prints out {Hello=World}
    }
}
import java.util.*;
公开课考试{
公共静态void main(字符串[]args){
Map Map=newhashmap();
地图。放置(“你好”,“世界”);
ArrayList=新建ArrayList();
列表。添加(地图);
Map[]mp=newhashmap[list.size()];
列表。toArray(mp);
System.out.println(mp[0]);//打印出{Hello=World}
}
}

HashMap[]map=list.toArray(新的HashMap[0])

简而言之,您无法创建具体参数化类型的数组。这是一个很好的解释。弹簧类型基本上与表示
Map batchValues
相同。参数类型仅供文档使用。Java类型系统中的这一巨大漏洞是性能的折衷。

@JigarJoshi这是我自己的问题,在我得到答案之前就已经解决了。在您之前的问题的注释中有正确的答案:没有参数化的数组type@AdrianShum哦,真的吗???我想知道Spring开发人员在想什么……我相信Spring与此无关?!谢谢,那个链接真的很有用。怎么样?您有Spring执行此操作的示例吗?int[]org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.batchUpdate(字符串sql,映射[]batchValues)Hu?弹簧的作用完全不同。阻止原始作者做他想做的事情的问题是,类型的泛型部分在运行时不存在。因此,您不能创建相同类型的新对象。这是一种方法。。。但这样做仍然会失去类型安全性。。。我认为使用新映射[list.size()]更合适,这样添加到列表中的任何映射都可以正常运行。
import java.util.*;
public class Test {

    public static void main (String [] args) {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("Hello", "World");
        ArrayList<Map<String, Object>> list = new ArrayList<Map <String, Object>>();
        list.add(map);

        Map<String, Object> [] mp = new HashMap[list.size()]; 
        list.toArray(mp);   
        System.out.println(mp[0]);    // prints out {Hello=World}
    }
}