如何使用`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); } }
List
的List#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[]
。