如何使用`toArray()`将linkedlist转换为数组?

我不知道如何将双精度链表转换为数组。 请帮我找到错误。

import java.util.*; public class StackCalculator { private LinkedList values; double value1 , value2 ; public StackCalculator() { values = new LinkedList(); } void push(double x) { values.addFirst(x); } double pop() { return values.removeFirst(); } double add() { value1=pop(); value2=pop(); return (value1 + value2); } double mult() { value1=pop(); value2=pop(); return (value1 * value2); } double[] v = new double[10]; double[] getValues() { return values.toArray(v); } } 

ListList#toArray()返回Double[]Double[]double[] 。 由于数组是对象而不是基元,因此自动装箱规则不适用于此处。

使用Double[]代替:

 Double[] array = list.toArray(new Double[list.size()]); 

…或者使用简单的for循环创建double[]

 double[] array = new double[list.size()]; for (int i = 0; i < list.size(); i++) { array[i] = list.get(i); // Watch out for NullPointerExceptions! } 

问题是列表的类型,即Double (对象),而您尝试返回double类型(基本类型)的数组。 如果更改getValues()以返回Double[]则应编译代码。

对于您的其他方法,这不是问题,因为Java会自动将Double s转换为double s并返回(称为autoboxing)。 对于数组类型,它不能这样做。

toArray被定义为返回T[] ,其中T是generics参数(无论如何单参数版本)。 由于原语不能用作generics参数,因此toArray不能返回double[]