一个ArrayList和一个动态数组有什么区别?

8

ArrayList 是动态数组的接口吗?还是说它们是同一事物?

类似于 ArrayList 对应动态数组,HashMap 对应 Map

除非是 ArrayList,否则我没有看到任何类似“动态数组”的 Java API?


1
“像:ArrayList 对应于 Map,动态数组对应于 HashMap?”不,这两部分都没有实际意义;映射和数组是两种不同的数据结构。 - Dennis Meng
5个回答

5
是的,简而言之。

更长的解释是,ArrayList是一种使用数组进行存储的集合,而不是链表、双向链表或类似的结构。这意味着它能够提供所有使用数组的好处,同时Java会为您处理动态调整数组大小的机制。

我记得初始数组是以默认最大大小(可以由用户指定)创建的。如果集合用完了空间,那么就会创建一个更大的数组,并将原始数组的内容复制到新数组中。增加大小的量是为了防止此操作发生太频繁,因为该操作相当昂贵。

Java还提供了类似的Vector集合,但也是线程安全的,请参见:ArrayList和Vector之间有什么区别?


2

ArrayListList 接口的可调整大小的数组实现。
如果您需要动态数组,那么这可能是您要找的内容。


2

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


抽象数据类型“动态数组”和奇怪的通用内置类型T[](“T的数组”)之间存在差异。 - user395760

1
如果你在动态意义上指的是一个可以改变大小的数组,那么 List 是动态数组的接口。它被命名为 ArrayList 是因为它内部使用了一个数组而已。
你的比喻不适用于 Java 集合框架,因为你可以说 ArrayList 是一个动态数组,但是 Map(或者说 HashMap)没有“原始”的对应物。

1
如果您所说的“动态数组”是指C++中的数组,那么Java中的所有数组都是动态的,并且存储在堆上。 ArrayList 是其可调整大小的包装器。它还提供简单的一致性检查——即在迭代期间不要从外部修改数组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接