Java ArrayList与动态数组相比如何

Java ArrayList与动态数组相比如何,java,data-structures,arraylist,Java,Data Structures,Arraylist,ArrayList只是动态数组的接口吗?或者他们是同一件事 比如:ArrayList对应于动态数组,HashMap对应于Map 除非是ArrayList,否则我看不到任何类似动态数组的Java API 在这种情况下,它们将是相同的东西 假设它们是同一件事?如果在动态意义上你指的是一个大小可以改变的数组,那么列表就是一个动态数组的接口。它被命名为ArrayList,因为它在内部使用数组,仅此而已 您的类比不适用于java collections框架,因为您可以说ArrayList是一个动态数组,但

ArrayList
只是动态数组的接口吗?或者他们是同一件事

比如:
ArrayList
对应于动态数组,
HashMap
对应于
Map

除非是
ArrayList
,否则我看不到任何类似动态数组的Java API

在这种情况下,它们将是相同的东西


假设它们是同一件事?

如果在动态意义上你指的是一个大小可以改变的数组,那么
列表
就是一个动态数组的接口。它被命名为
ArrayList
,因为它在内部使用数组,仅此而已


您的类比不适用于java collections框架,因为您可以说
ArrayList
是一个动态数组,但
Map
(或
HashMap
)没有“原始”对应项。

ArrayList
列表
接口的可调整大小的数组实现。

因此,如果您需要一个动态数组,这可能就是您想要的。

ArrayList
不是一个动态数组,它不是一个数组类型动态或非动态,它只是
列表
接口的实现之一。理解和之间的区别。另一方面,是具有固定大小的容器对象

是的。简而言之。

一个较长的解释是,
ArrayList
是一个使用数组存储的集合,而不是链表、双链表或类似的集合。这意味着它提供了使用数组的所有好处,而Java则负责为您调整数组大小的机制(动态)

我似乎记得,初始数组是使用默认的最大大小(可以由用户指定)创建的。如果集合空间不足,则会创建一个更大的数组,并将原始数组的内容复制到新数组中。设置大小增量是为了防止这种情况过于频繁,因为操作成本相当高


java还提供了类似于C++的代码< > vector >代码>,但也是线程安全的,参见:

< p>如果“动态数组”是C++中的数组,那么java中的所有数组都是动态的,并存储在堆中。code>ArrayList是一个可调整大小的包装器。它还提供简单的一致性检查,即在迭代过程中不从外部修改数组。

“比如:ArrayList对应于Map,dynamic array对应于HashMap?”不,这两个部分都没有实际意义;映射和数组是两个独立的数据结构。抽象数据类型“dynamic array”和奇怪的通用内置类型
T[]
T的数组
)之间存在差异。