繁体   English   中英

为什么在 Java 中更喜欢使用列表而不是数组?

[英]Why is it preferred to use Lists instead of Arrays in Java?

许多人和作者建议我们使用列表而不是数组。

List <Integer> list = new ArrayList<Integer>();
list.addElement(1);
....

它背后的原因是什么?

您通常应该更喜欢为工作选择正确的数据结构。 您需要了解您手头的任务以及您拥有的所有不同选项,以及它们如何在迭代、搜索、添加、删除和插入数据方面进行比较。 通常,您需要了解数据结构如何访问和操作内存,并根据您预期应用程序的使用方式选择最佳数据结构。

显然,它并不总是明确的。 但是您可以理解不同数据结构的理想情况。

例如,纯静态、固定长度的数据(您只需在其中迭代而不需要搜索)是数组的理想选择。 在密码算法中使用这样的数组是很常见的。 如果数据是静态的但不是迭代,您需要搜索,您可能需要某种类型的树结构。 如果你想要快速插入,散列可能是理想的。 如果数据经常更改,您需要一个能够有效更改其大小的结构,例如列表。

当然,有许多数据结构的变体和组合旨在解决各种特定问题。 之所以有这么多,是因为它们在编写高效程序方面发挥着重要作用。 无论如何,我的观点是,学习数据结构。 了解每种情况的理想情况,然后您将能够为任何任务决定或设计合适的数据结构。

来自Array 与 ArrayList

当您事先不了解元素数量时,使用 ArrayList 比使用 Array 更好。 ArrayList 比 Arrays 慢。 因此,如果您需要效率,请尽可能使用数组。

列表的大小很容易增长,您可以轻松地添加和删除列表中间的元素。 这不能用数组来完成。 不过,您需要考虑您需要该列表的用途。 如果您认为列表不会发生很大变化,请改用数组。

要记住的一件事是,Java Collections 类更喜欢通用的易用性,而不是针对特定场景的优化。 因此,正如之前的响应者所说,您确实需要考虑如何使用它。

例如,如果您正在创建“大型”数据结构,那么 ArrayList 可能会变得非常低效。 每次达到数组的限制时,它都会以(我相信)2 倍的大小分配一个新数组。 因此,平均而言,ArrayList 的利用率仅为 75%。

一般来说,人们可以将 Java 集合视为通常在大多数情况下足够好的第一近似值,并且当您遇到可衡量的性能问题时,您应该准备使用替代的、更专业的集合实现。

在您提到的情况下,您可以将 ArrayList 视为处理数组的更方便的方法。

编辑:
在处理原始类型的某些情况下,最好使用数组,因为在 Arraylists 的情况下,它涉及原始类型的装箱和拆箱,与使用数组处理原始类型相比,这可能会慢一些。

我使用 Lists、ArrayLists 等主要是因为我不需要担心下一个空闲插槽在哪里或者它是否足够大,因为 Sun 已经为我做了这些。

是的,将其声明为 List 比 ArrayList 更好。 为什么? 答案是代码解耦

这样做的主要原因是将代码与接口的特定实现分离。

其余代码只知道数据是列表类型,因此您可以在列表接口的不同实现之间切换。

假设您将其声明为 ArrayList,然后您意识到您应该使用 LinkedList,更改它并不容易,因为不能保证其余代码不使用特定于 ArrayList 的方法。

但是如果你把它声明为 List,你可以简单地改变 List 的实例,

List <Integer> list = new ArrayList<Integer>();

List <Integer> list = new LinkedList<Integer>();

并且可以肯定这会起作用,因为您已经编写了遵循列表接口提供的合同的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM