如何在 Java 列表中存储原始数字?当我尝试做的时候
List<double> list = new ArrayList<>();
编译器告诉我 double
不是一个对象。这些集合似乎不是为原始人制作的。我笨拙的解决方法如下:
List<Double> list = new ArrayList<>();
但是这样比较慢并且占用更多的内存。有更好的方法吗?
最佳答案
您不能在 Java 的集合中直接使用原语。这是 Java 中经过深思熟虑的设计决策(尽管有些人认为这是一个错误)。 Java 中的泛型是事后加固的,这就是它们在整个语言中的应用不统一的原因。
容器基本上需要对象类型,而原始类型不是从 Object
派生的(即,Object
与 Java 中的所有其他对象不同,不是它们的父类(super class))。从代码编写的角度来看,看起来确实没有包装器:
list.add(6); //list is of type List<Integer>
int num = list.get(i);
这是因为装箱和拆箱是自动为您完成的。在字节码级别,您实际拥有的是:
list.add(new Integer(6));
int num = ((Integer) list.get(i)).intValue();
因此,您拥有的第二个选项是 Java 中的正确方法。
如果你想要一个不那么需要内存的选项,你可以选择直接 double[]
.但是,这意味着您将不得不编写代码来管理添加、检索、更新和删除操作。如果额外工作太多,您可以尝试使用 Apache Commons Primitives .
另外,我怀疑你的意思是 List<Double> list = new ArrayList<>();
(或其他一些实现),对吗?这是因为您所拥有的无法编译。
关于java - Java 列表中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22151932/