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

kat*_*thy 13 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);
    }

}
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 26

List#toArray()一个的List<Double>回报Double[].这Double[]是不一样的double[].由于数组是对象而不是基元,因此自动装箱规则不适用于此处.

要么使用Double[]:

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

...或double[]使用简单的for循环创建自己:

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

  • ow,O(n ^ 2)for循环?为什么不`int i = 0; for(Double v:list)array [i ++] = v;` (5认同)

Jor*_*orn 4

问题是列表的类型,即Double(对象),而您试图返回类型double(原始类型)的数组。如果您更改getValues()为返回Double[].

对于其他方法,这不是问题,因为 Java 自动将Doubles 转换为doubles 并返回(称为自动装箱)。对于数组类型它无法做到这一点。