关于Java的数组或列表吗?

Java - List or Array?

本问题已经有最佳答案,请猛点这里访问。

我知道JavaS使Java中的事情变得更容易,而不是使用硬数组(列表允许您随意添加/删除元素,并自动调整大小等)。

我已经阅读了一些建议,只要可能,数组应该在Java中避免使用,因为它们根本不灵活(有时会施加奇怪的限制,例如,如果你不知道数组的大小,等等)。

这是一个"好的实践"来停止使用数组,而只使用列表逻辑吗?我确信列表类型比数组消耗更多的内存,因此开销更大,但是这有意义吗?大多数列表在运行时都会被收集起来,如果它们被放在任何地方,那么这可能不像我想的那么重要?


我不喜欢教条。知道规则;知道何时打破规则。

"从不"太强,尤其是在软件方面。

ArraysLists都是GC的潜在目标,所以这是一个清洗。

是的,在开始之前必须知道数组的大小。当你这样做的时候,没有什么问题。

使用java.util.Collectionsjava.util.Arrays类很容易根据需要来回切换。


我认为一个好的经验法则是使用Lists,除非您需要Array(出于内存/性能原因)。否则,Lists通常更容易维护,因此不太可能引起将来的错误。

列表在自动扩展方面提供了更多的灵活性/功能,因此,除非您需要内存(并且无法负担列表所产生的开销),或者不介意在数组扩展/收缩时保持数组大小,否则我建议您使用列表。

尽量不要对代码进行过多的微观管理,而应该关注更清晰易读的组件。


这取决于清单。LinkedList可能只在需要时占用空间,而ArrayList通常在达到容量时会大大增加空间。在内部,ArrayList是使用数组实现的,但它是一个始终比您想要的大的数组。但是,由于它存储引用,而不是对象,所以在大多数情况下,内存开销是可以忽略的,我相信方便是值得的。


我不得不说我遵循了使用collections框架的这种方法,否则我可能会使用数组。与数组相比,这些集合为您提供了许多好处和便利,但是的,可能会对性能造成一些影响。

编写易于理解且难以破解的代码更好,数组要求您放入大量的检查代码,以确保您不访问不应访问的数组位,或者不应在其中放入许多内容等。鉴于大多数时间性能不是问题,因此不应担心。