toArray() 返回对象[]

piz*_*zza 0 java arrays collections arraylist toarray

我正在尝试使用 toArray() 将 ArrayList 转换为 Array,但它返回一个 object[] 而不是 double[]。见下文:

double [] arr = arrList.toArray(new Double[arrList.size()]);
Run Code Online (Sandbox Code Playgroud)

我收到不兼容的类型错误。

这是 arrList 包含的内容:

I/System.out: [0.0, 2.455430030822754, 1.834529995918274, 0.7368429899215698, -0.5264459848403931, -1.5101100206375122, -1.8526500463485718, -1.6131700277328491, -0.9388419985771179, 0.053711701184511185, 0.35541099309921265, -0.18560799956321716, -0.884518027305603, -1.4304900169372559, -1.5486400127410889, -0.943471014499, 0.0]
Run Code Online (Sandbox Code Playgroud)

这是它的获得方式:

private void rec(SensorEvent event) {

    double x = event.values[0];

    arrList.add(x);

}
Run Code Online (Sandbox Code Playgroud)

我试过不调整数组大小(即使用 new Double[0]),虽然我认为这不是问题,但这也不起作用。

我在网上寻找了类似的问题,我发现的都是字符串示例,我认为 Double 可能是问题所在?不太确定。

在这方面很新,所以很抱歉,如果很明显。

Cod*_*ice 8

double [] arr = arrList.toArray(new Double[arrList.size()]);
Run Code Online (Sandbox Code Playgroud)

double[]是与 不同的类型Double[]。虽然Java可以相互转换doubleDouble自动装箱和autounboxing,它不能从转换Double[]double[]。您可以通过以下方式解决问题:

Double [] arr = arrList.toArray(new Double[arrList.size()]);
Run Code Online (Sandbox Code Playgroud)


And*_*cus 5

您可以使用:

Double[] array = arrList.toArray(Double[]::new);
Run Code Online (Sandbox Code Playgroud)

请注意,java 8 中引入了方法引用,java 11 中引入了该方法。请参阅 Code-Apprentice 对 java 7 编译器解决方案的回答。

  • @pizza,这个答案最重要的部分首先是“Double[]”。 (2认同)
  • 请注意,[`Collection#toArray(IntFunction)`](https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/util/Collection.html#toArray(java .util.function.IntFunction)) 已添加到 _Java 11_ 中。 (2认同)