13 java collections arraylist primitive-types
可能重复:
在java集合中存储原始值?
我的Java教科书说集合的元素,例如ArrayList,不能是原始类型.是否有一个原因?我的意思是Sun的某个人是否决定了这一点,或者是否存在阻碍这样做的障碍?我理解我的例子半答案我的问题,因为ArrayList需要一个对象,而原语不是对象.但后来我想为什么它们也不能有原始类型呢?
这样做有什么障碍吗?
您可以编写近乎相同的版本,ArrayList
这些版本是为了存储其中一种非类型类型而定制的,例如IntegerArrayList
,依此类推.阻碍这种情况的障碍是,这样的类会爆炸,因为你将原始类型的数量乘以集合类型的数量.为了使标准集合框架易于管理,这被排除在外.
要在语言中更加巧妙地解决这个问题,您需要泛型来允许基本类型作为类型参数,并改善数组和泛型之间的交互.
存储未包装的原语会使集合代码变得非常复杂.然而,随着包装(Integer
对int
等),代码是相当直接的.几年来,Java已经支持"自动装箱",这意味着,如果你给一个int
地方的Integer
预期下,int
在一个包裹起来Integer
实例为你(反之亦然).
小智 5
有一些称为“包装器”的对象代表所有原始类型。例如,有一个名为的类Integer
支持int
. 您可以使用原始包装器来保存集合中的值。
原始类型(至少在 Java 5 之前)的问题在于它们没有从基Object
类扩展。所有集合都需要为它们正在使用的所有方法指定一个类——并且它们指定Object
,因为Object
是所有类的基础。
从 Java 5 开始,您会发现 Java 会在您需要时隐式地在原语和相应的包装类之间切换。这意味着您可以将int
、 或double
等添加到集合中。VM 会自动为您将原语包装在包装类中,并将包装放在集合中。