首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java列表中的数字

Java列表中的数字
EN

Stack Overflow用户
提问于 2014-03-03 16:25:26
回答 5查看 123关注 0票数 2

如何在Java列表中存储原语数字?当我试着去做

代码语言:javascript
复制
List<double> list = new ArrayList<>();

编译器告诉我,double不是一个对象。看来这些收藏品不是为原语制作的。我笨拙的解决办法如下:

代码语言:javascript
复制
List<Double> list = new ArrayList<>();

但是这样做速度更慢,使用的内存也更多。有更好的方法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-03-03 16:26:45

不能在Java的集合中直接使用原语。在Java中,这是一个深思熟虑的设计决策(尽管有些人认为这是一个错误)。Java中的泛型是在事实发生后使用的,这就是为什么它们的应用程序在整个语言中并不统一的原因。

容器基本上想要对象类型,而基本类型不是从Object派生出来的(也就是说,Object不是它们的超类,不同于Java中的所有其他对象)。从代码编写的角度来看,显然没有包装器:

代码语言:javascript
复制
list.add(6); //list is of type List<Integer>
int num = list.get(i); 

这是因为装箱和取消装箱是自动为您完成的。在字节码级别上,您实际拥有的是:

代码语言:javascript
复制
list.add(new Integer(6));
int num = ((Integer) list.get(i)).intValue();

所以,第二个选择是在Java中找到正确的方法。

如果你想要一个更少的内存消耗选项,你可以选择一个直接的double[]。但是,这意味着您必须编写代码来管理添加、检索、更新和删除操作。如果这是太多额外的工作,您可以尝试使用Apache共用基础

而且,我怀疑您是指List<Double> list = new ArrayList<>(); (或其他一些实现),对吗?这是因为您所做的都不会编译。

票数 2
EN

Stack Overflow用户

发布于 2014-03-03 16:26:21

不,没有更好的办法了。Collection实例只能保存对象,而不能保存原语。所以你的解决办法是可行的。

除非您正在编写时间关键组件,否则在这种情况下,不知道内存使用情况和/或性能可能表明您是过早优化的胜利。

票数 0
EN

Stack Overflow用户

发布于 2014-03-03 16:27:26

不能将集合与原语一起使用。只能将对象存储在集合中。这些对象将自动取消装箱。

这是唯一能做到的方法。

您可以从以下链接获得更多信息:http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22151932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档