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

时间:2010-02-20 23:56:00

标签: java

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

import java.util.*;
public class StackCalculator {


  private   LinkedList<Double> values;
  double value1 , value2 ;

  public StackCalculator()
  {
     values = new LinkedList<Double>();
  }


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

}

3 个答案:

答案 0 :(得分:26)

List#toArray()的{​​{1}}会返回List<Double>Double[]Double[]不同。由于数组是对象而不是基元,因此autoboxing规则不适用于此处。

使用double[]代替:

Double[]

...或使用简单的Double[] array = list.toArray(new Double[list.size()]); 循环创建double[]

for

答案 1 :(得分:4)

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

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

答案 2 :(得分:1)

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