我发现在日常编程中,使用 ArrayList
比使用数组更容易且有更多的控制。
- 如果可以使用
ArrayList
,是否适合避免使用数组? - 当我用
ArrayList
替换数组时,是否需要考虑内存方面的问题?
我发现在日常编程中,使用 ArrayList
比使用数组更容易且有更多的控制。
ArrayList
,是否适合避免使用数组?ArrayList
替换数组时,是否需要考虑内存方面的问题?JVM
的实现也会产生很大的影响。但是,在arrays
中添加和获取条目始终比在List
中更快。如果您确定需要的array
的大小,那么使用数组时也可以节省一些内存。
然而,List
为您提供了更多修改内容的灵活性,基本上有许多方法来操作数据。它完全支持generics
。
由于数组是covariant
的,而Generics是invariant
的,所以Arrays and Generics don't mix
,因此Joshua Bloch
在他的书Effective Java II
第25章中建议使用List而不是array。我肯定会遵循他的建议并建议您也使用List而不是array。当在一个数组和ArrayList之间做出选择时,首先要考虑的是容器的长度是否需要更改。如果需要更改,则使用ArrayList;即使不需要更改,我仍然会建议使用ArrayList。原因是使用ArrayList所产生的性能开销通常不足以证明用Array进行替代,除非你绝对确定性能将成为一个问题。
一般来说,在大多数情况下,使用List比使用Array更好。由于List是一个接口,提供了许多特定的实现(如ArrayList、LinkedList等),这为客户代码和您带来了更多的灵活性。
例如,如果您编写一个执行某些计算并返回List的方法,客户端代码仅能假设返回的List是根据Java文档中的定义构建的。
例如,在客户端代码中,您可能会发现类似以下内容:
List<T> list = foo.getList();
ArrayList 给我们提供了许多在简单数组中不可能实现的功能,我们必须编写大量的方法来完成 Arraylist 中可以一步完成的事情。所以除了内存消耗更高之外,还需要处理大量数据和性能问题时,如果可以使用简单数组就不要使用 ArrayList,因为简单数组运行速度更快。
如果可以使用List,那么避免使用数组是否合适?
在一些情况下,您可能希望使用数组而不是列表。我建议您学习“大O符号”。此外,请记住,您可以使用列表并通过调用yourList.toArray(yourArray)
方法将其转换为数组。您也可以使用Arrays
类(Arrays.asList(yourArray)
)进行相反的操作。显然,使用List
比使用数组更加灵活,但如果数据集很小,则使用数组可能比使用列表更有效率。
如果我用List替代数组,有什么需要考虑的内存问题吗?
您需要牢记的最重要的内存考虑因素是内存分配。一旦创建了一个数组,您就无法增加或缩小它的大小。如果您需要一个对象数组(假设有100个项目),每个项目的大小为1M,直到该数组被垃圾回收,您就会为该对象(数组)分配100MB的内存。对于列表,如果您想要删除或添加项目,可以轻松地这样做,从而减少或增加列表的内存占用。
ArrayList
的问题吗? - OrangeDog