我有一个这样创建的 ArrayList:
public class Main {
public static void main(String[] args) {
// write your code here
ArrayList list1 = new ArrayList();
list1.add(0, 5);
list1.add(1, 3.5);
list1.add(2, 10);
}
}
我正在尝试使用 toArray
方法从中创建一个数组:
public class Main {
public static void main(String[] args) {
// write your code here
ArrayList list1 = new ArrayList();
list1.add(0, 5);
list1.add(1, 3.5);
list1.add(2, 10);
Double[] list2 = list1.toArray(new Double[list1.size()]);
}
}
但是,我收到一个错误:
(Error:(16, 39) java: incompatible types: java.lang.Object[] ).
所以我尝试将右侧转换为双倍:
Double[] list2 = (Double[]) list1.toArray(new Double[list1.size()])
这次我在线程“main”中遇到异常。我还尝试从一开始就将我的 ArrayList 声明为 double:
ArrayList<double> list1 = new ArrayList()<double>
没有成功。如何正确地做到这一点?我知道我的问题可能是非常基本的。
最佳答案
问题是你做错了很多事情:
ArrayList list1 = new ArrayList();
不正确,因为您使用的是原始类型。你应该得到一个编译器警告。鉴于之前的
list1.add(0, 5)
是不正确的。5
将装箱为Integer
因为那个编译器不知道该列表只应该包含Double
值(value)观。你得到这个:
(Error:(16, 39) java: incompatible types: java.lang.Object[] ).
因为你一定做过这样的事情:
Double[] list2 = list1.toArray();
您似乎已在发布的代码中更正了该问题。但是没有参数
toArray
方法返回Object[]
包含列表内容。ArrayList<double> list1 = new ArrayList()<double>
是不正确的,因为您不能将基本类型用作泛型类型参数,并且 RHS 上的语法是错误的。正确的版本是
ArrayList<Double> list1 = new ArrayList<>();
有一个空钻石。
令人惊讶的是,编写 toArray
的最佳(最有效)方式是:
Double[] list2 = list1.toArray(new Double[0]);
显然,如果它自己分配数组,实现能够更快地初始化数组。 (或者我听说...)
关于java - 如何将 java ArrayList 转换为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59225396/