我发现在我的日常编码中,使用ArrayList比使用数组更容易做任何事情,而且控制力更强。所以我问:1.如果我可以使用ArrayList来代替,那么是否适合避免使用数组?1.当我用ArrayList替换数组时,我需要考虑内存的一些事情吗?
ArrayList
iovurdzv1#
使用一个而不是另一个肯定会影响性能和效率,尽管它可能很小。JVM的实现也会影响很多。然而,从arrays添加和获取条目总是比List快。如果你确定你需要的array的大小,你可能在使用数组时也会节省很少的内存。然而,List在修改内容方面给了你更大的灵活性,基本上有很多方法来操作数据。它完全支持generics。由于数组是covariant,泛型是invariant,Arrays and Generics don't mix所以Joshua Bloch在他的书Effective Java II第25章中推荐使用列表而不是数组。我一定会听从他的建议,推荐你使用列表而不是数组。
JVM
arrays
List
array
generics
covariant
invariant
Arrays and Generics don't mix
Joshua Bloch
Effective Java II
gpnt7bae2#
当在Array和ArrayList之间进行具体选择时,您首先要考虑的是容器的长度是否需要更改。如果需要更改,请使用ArrayList,但即使不需要更改,我仍然认为你应该使用ArrayList,因为使用ArrayList带来的性能开销通常不足以保证替代除非你绝对知道性能会成为一个问题。一般来说,我认为在大多数情况下使用List比使用Array更好。由于开销减少,数组确实提供了略高的性能。然而,由于List是一个接口,因此有许多特定的实现(ArrayList,LinkedList等),这给了您和客户端代码更多的灵活性。例如,如果您要编写一个执行某些计算并返回List的方法,则客户端代码只能假设返回的List是根据Java文档中的定义构造的。例如,在客户端代码中,您可能会发现如下内容:
List<T> list = foo.getList();
字符串如果方法getList()当前返回一个ArrayList,而你想改变它的行为,使它现在返回一个LinkedList,你可以这样做,而不必担心破坏使用你的方法的客户端代码,因为它只是假设它将接收一个List的一些实现,而不是任何特定的实现。
aiazj4mn3#
ArrayList给了我们很多在简单数组上不可能实现的功能,我们必须编写大的方法来完成我们可以在ArrayList中一步完成的事情。所以ArrayList比简单数组需要更多的内存消耗,但是你可以在小程序中继续使用,这不会有太大的区别,但是当处理大量数据和性能问题时,如果你可以使用简单的数组,不要使用ArrayList,因为ArrayList要快得多。
xxhby3vn4#
1.如果我可以使用List来代替,那么避免数组是否合适。在某些情况下,您可能希望在列表上使用数组。我建议您学习“Big-O表示法”。此外,请记住,您可以通过调用yourList.toArray(yourArray)方法来使用列表并转换为数组。您也可以通过使用Arrays类来执行相反的操作(Arrays.asList(yourArray))。由于显而易见的原因,使用List比使用数组更通用,但如果数据集很小,使用数组可能比使用列表更有效。1.当我用列表替换数组时,有没有关于内存的事情需要考虑(用列表代替数组)。你需要记住的最重要的内存考虑是内存分配。一旦你创建了一个数组,你就不能增加或缩小它的大小。如果你需要一个对象数组,(假设100个项目)大小为1 M,直到该数组被垃圾收集,您将为该对象(数组)分配100 MB。使用列表,如果您想要删除或添加项目,你可以很容易地做到这一点;从而减少或增加列表的内存占用。
yourList.toArray(yourArray)
Arrays
Arrays.asList(yourArray)
fjaof16o5#
*原语与对象类型:
int
char
Integer
总之,虽然数组在某些情况下可以提供更好的性能和更低的内存消耗,但ArrayList通过其动态配置和其他方法提供了更大的灵活性和便利性。它们之间的选择取决于您程序的特定要求。
5条答案
按热度按时间iovurdzv1#
使用一个而不是另一个肯定会影响性能和效率,尽管它可能很小。
JVM
的实现也会影响很多。然而,从arrays
添加和获取条目总是比List
快。如果你确定你需要的array
的大小,你可能在使用数组时也会节省很少的内存。然而,List
在修改内容方面给了你更大的灵活性,基本上有很多方法来操作数据。它完全支持generics
。由于数组是covariant
,泛型是invariant
,Arrays and Generics don't mix
所以Joshua Bloch
在他的书Effective Java II
第25章中推荐使用列表而不是数组。我一定会听从他的建议,推荐你使用列表而不是数组。gpnt7bae2#
当在Array和ArrayList之间进行具体选择时,您首先要考虑的是容器的长度是否需要更改。如果需要更改,请使用ArrayList,但即使不需要更改,我仍然认为你应该使用ArrayList,因为使用ArrayList带来的性能开销通常不足以保证替代除非你绝对知道性能会成为一个问题。
一般来说,我认为在大多数情况下使用List比使用Array更好。由于开销减少,数组确实提供了略高的性能。然而,由于List是一个接口,因此有许多特定的实现(ArrayList,LinkedList等),这给了您和客户端代码更多的灵活性。
例如,如果您要编写一个执行某些计算并返回List的方法,则客户端代码只能假设返回的List是根据Java文档中的定义构造的。
例如,在客户端代码中,您可能会发现如下内容:
字符串
如果方法getList()当前返回一个ArrayList,而你想改变它的行为,使它现在返回一个LinkedList,你可以这样做,而不必担心破坏使用你的方法的客户端代码,因为它只是假设它将接收一个List的一些实现,而不是任何特定的实现。
aiazj4mn3#
ArrayList给了我们很多在简单数组上不可能实现的功能,我们必须编写大的方法来完成我们可以在ArrayList中一步完成的事情。所以ArrayList比简单数组需要更多的内存消耗,但是你可以在小程序中继续使用,这不会有太大的区别,但是当处理大量数据和性能问题时,如果你可以使用简单的数组,不要使用ArrayList,因为ArrayList要快得多。
xxhby3vn4#
1.如果我可以使用List来代替,那么避免数组是否合适。
在某些情况下,您可能希望在列表上使用数组。我建议您学习“Big-O表示法”。此外,请记住,您可以通过调用
yourList.toArray(yourArray)
方法来使用列表并转换为数组。您也可以通过使用Arrays
类来执行相反的操作(Arrays.asList(yourArray)
)。由于显而易见的原因,使用List
比使用数组更通用,但如果数据集很小,使用数组可能比使用列表更有效。1.当我用列表替换数组时,有没有关于内存的事情需要考虑(用列表代替数组)。
你需要记住的最重要的内存考虑是内存分配。一旦你创建了一个数组,你就不能增加或缩小它的大小。如果你需要一个对象数组,(假设100个项目)大小为1 M,直到该数组被垃圾收集,您将为该对象(数组)分配100 MB。使用列表,如果您想要删除或添加项目,你可以很容易地做到这一点;从而减少或增加列表的内存占用。
fjaof16o5#
*原语与对象类型:
int
或char
,数组直接存储值。对于对象类型,数组存储对象的引用。ArrayList
只能存储对象,不能直接存储原始数据类型。但是,它使用自动装箱和拆箱将原始类型转换为相应的 Package 器类(例如,int
到Integer
)。*性能:
ArrayList
更高效,原因有几个:数组具有更简单的内存布局,并且不涉及与对象相关的开销(如ArrayList
)。ArrayList
提供的动态配置和其他特性的情况下,阵列可能会更快。*内存消耗:
ArrayList
消耗更少的内存,因为它们没有ArrayList
用于动态重定向的额外方法和数据结构的开销。*先后顺序:
ArrayList
都是按顺序存储元素的。ArrayList
不按顺序存储元素的想法是不正确的。总之,虽然数组在某些情况下可以提供更好的性能和更低的内存消耗,但
ArrayList
通过其动态配置和其他方法提供了更大的灵活性和便利性。它们之间的选择取决于您程序的特定要求。