【问题标题】:How to convert linkedlist to array using `toArray()`?如何使用 `toArray()` 将链表转换为数组?
【发布时间】:2011-01-19 05:47:22
【问题描述】:

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

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

}

【问题讨论】:

  • 谢谢。这帮我解决了问题

标签: java


【解决方案1】:

List&lt;Double&gt;List#toArray() 返回 Double[]Double[]double[] 不同。由于数组是对象,而不是原语,autoboxing 规则在此处不适用也不能适用。

改用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!
}

【讨论】:

  • ow, O(n^2) for 循环?为什么不int i = 0; for (Double v : list) array[i++] = v;
  • 是的,第二个选项非常糟糕。 Sparkleshy 的建议会好很多。
【解决方案2】:

问题在于列表的类型,即Double(对象),而您试图返回double(原始类型)类型的数组。如果您将getValues() 更改为返回Double[],您的代码应该可以编译。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2012-04-16
      • 2013-01-05
      • 2016-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      相关资源
      最近更新 更多