java - Java 列表中的数字

标签 java data-structures

如何在 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/

相关文章:

java - 指针引用和操作所指向的对象 - Java 中的等效结构

java - android 数组索引越界

java - 在 NIO 中配对 SocketChannel

java - 如何更改eclipse中注释的层次结构?

java - 计算机重新启动后 Spring 无法连接到 mysql 数据库我该如何诊断问题所在

c++ - 使用什么数据结构来快速存储文本文件,其中有变量号。行数和变量号子元素的快速,在 C++ 中?

c++ - 设计题: How can I maintain a stack of object

performance - 用于实现堆栈的链表与动态数组

java - 按满足一定条件的值移除元素

algorithm - 最近空闲单元格的二维网格数据结构