是什么决定是否应该使用另一个?
我曾经认为决定因素是你是否知道你要存储的东西的大小,但我认为可能还有更多的东西。
答案 0 :(得分:3)
当您知道集合的确切大小并且不希望添加/删除元素时使用数组。
当您不知道集合的确切大小时,请使用List
(ArrayList
),并且您希望在某些时候更改它。
如果您使用的是Java8,则会有Stream API
,这有助于在使用集合时显着减少样板代码。这是ArrayList
(以及所有收藏集和地图)的另一个优势。
更多信息:
答案 1 :(得分:3)
更多差异:
Java中Array和ArrayList的主要区别在于Array是固定长度的数据结构,而ArrayList是variable length
Collection类。一旦在Java中创建,您就无法更改Array的长度,但ArrayList在满员时根据容量和负载因子重新调整大小。由于ArrayList在Java内部由Array支持,因此ArrayList中的任何调整大小操作都将slow down performance
,因为它涉及创建新数组并将内容从旧数组复制到新数组。
Java中Array和ArrayList之间的另一个区别是你不能将Generics与Array一起使用,因为如果你试图存储,Array实例知道它可以容纳什么类型的类型并抛出ArrayStoreException
不能转换为Array类型的类型。 ArrayList允许您使用Generics to ensure type-safety
。
ArrayList和Array之间的另一个主要区别是,您无法在ArrayList中存储primitives
,它只能包含对象。而Array可以包含Java中的基元和对象。虽然Java 5的Autoboxing可能会给你一个在ArrayList中存储基元的印象,但它实际上会自动将基元转换为Object。
Java提供了add()
方法将元素插入到ArrayList中,你可以简单地使用赋值运算符将元素存储到Array中,例如为了将Object存储到指定位置。
Array与ArrayList的另一个不同之处在于您可以创建ArrayList without specifying size
的实例,Java将创建具有默认大小的Array List,但是必须在直接或间接创建时提供Array的大小在创建Array时初始化Array。顺便说一下,你也可以在创建时初始化ArrayList。
答案 2 :(得分:2)
除非速度至关重要(真的关键,就像每微秒计数一样),尽可能使用ArrayList
。它使用起来非常简单,这通常是最重要的考虑因素。
答案 3 :(得分:0)
通常,我使用ArrayList而不是数组,因为它们提供了许多非常有用的方法。我认为如果性能非常重要,可以使用数组,在非常特殊的情况下。
答案 4 :(得分:0)
数组是固定的,ArrayList是可增长的。如果元素的数量是固定的,则使用数组 收集实现的一大好处是它们为您提供了很大的灵活性。因此,根据您的需要,您可以将List表现为ArrayList或LinkedList等。另外,如果你看一下Collection API,你会发现几乎所有你需要做的事情都有方法。