Как преобразовать связанный список в массив с помощью `toArray()`?
Я не знаю, как преобразовать связанный список парных в массив. Пожалуйста, помогите мне найти ошибку.
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);
}
}
Ответы
Ответ 1
List#toArray()
List<Double>
возвращает Double[]
. Double[]
не совпадает с Double[]
. Поскольку массивы - это объекты, а не примитивы, правила autoboxing не применяются и не могут применяться здесь.
Вместо этого используйте Double[]
:
Double[] array = list.toArray(new Double[list.size()]);
... или создайте 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!
}
Ответ 2
Проблема заключается в типе вашего списка, который является Double
(object), в то время как вы пытаетесь вернуть массив типа Double
(примитивный тип). Ваш код должен скомпилироваться, если вы измените getValues()
, чтобы вернуть Double[]
.
Для других методов это не проблема, потому что Java автоматически преобразует Double
в Double
и обратно (называется autoboxing). Это не может быть сделано для типов массивов.
Ответ 3
toArray
определяется как return T[]
, где T - общий аргумент (в любом случае вариант с одним аргументом). Поскольку примитивы не могут использоваться в качестве общих аргументов, toArray не может вернуть double[]
.