4

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

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

这是完全停止使用数组而只使用列表逻辑的“好习惯”吗?我确信 List 类型比数组消耗更多的内存,因此具有更高的开销,但这很重要吗?大多数列表会在运行时被 GC 处理,如果它们被放置在任何地方,那么也许它不像我想的那么重要?

4

4 回答 4

9

我不喜欢教条。了解规则;知道什么时候打破规则。

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

Arrays并且Lists都是 GC 的潜在目标,所以这是一个清洗。

是的,在开始之前您必须知道数组的大小。对于你这样做的情况,它没有任何问题。

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

于 2013-03-21T17:51:06.407 回答
5

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

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

尽量不要对代码进行过多的微观管理,而是专注于更易识别和可读的组件。

于 2013-03-21T17:50:46.560 回答
2

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

于 2013-03-21T17:52:38.520 回答
1

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

最好编写易于理解且难以破解的代码,数组需要您放入大量检查代码以确保您不会访问您不应该访问的数组位或在其中放入很多东西等. 鉴于大多数时候性能不是问题,它不应该是一个问题。

于 2013-03-21T17:57:10.273 回答