Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-列表还是数组?_Java_Arrays_List_Arraylist - Fatal编程技术网

Java-列表还是数组?

Java-列表还是数组?,java,arrays,list,arraylist,Java,Arrays,List,Arraylist,我知道列表在Java中比使用硬设置数组更容易(列表允许您随意添加/删除元素,并自动调整大小,等等) 我读过一些文章,建议尽可能避免在java中使用数组,因为它们一点也不灵活(有时会施加奇怪的限制,例如如果您不知道数组需要的大小,等等) 这是停止使用数组而只使用列表逻辑的“良好实践”吗?我确信列表类型比数组消耗更多的内存,因此具有更高的开销,但这是否重要?大多数列表在运行时都会被GC’ed,如果它们被放在任何地方,那么可能这并不像我想的那么重要?我认为一个好的经验法则是使用列表,除非您需要数组(出

我知道列表在Java中比使用硬设置数组更容易(列表允许您随意添加/删除元素,并自动调整大小,等等)

我读过一些文章,建议尽可能避免在java中使用数组,因为它们一点也不灵活(有时会施加奇怪的限制,例如如果您不知道数组需要的大小,等等)


这是停止使用数组而只使用列表逻辑的“良好实践”吗?我确信列表类型比数组消耗更多的内存,因此具有更高的开销,但这是否重要?大多数列表在运行时都会被GC’ed,如果它们被放在任何地方,那么可能这并不像我想的那么重要?

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

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


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

我不喜欢教条。了解规则;知道什么时候该违反规则

“从不”太强了,尤其是在软件方面

数组
列表
都是GC的潜在目标,因此这是一个错误

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


使用
java.util.Collections
java.util.Arrays
类可以根据需要轻松地来回切换。

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

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


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

除非你能证明它的重要性,否则它永远不会有意义。如果你知道它的大小并且确信它不会变化,你可以使用数组。在所有语言中都是一样的。如果你不知道数组的大小,列表很有用,否则你也可以对数组做同样的事情。我认为问题不在于是使用
List
还是使用
array
,而是要知道两者之间的区别,以便理解其中一个优于另一个。就像学习
指针
一样,即使你只在
Java
中编码。任何时候项目的数量不固定,或者你不知道项目的数量,你都需要一个列表而不是数组。也就是说,如果数据访问层从查询返回一个项目数组,它将指示数组的大小,并且不太可能向其中添加更多的项目。