6

anArrayList只是动态数组的接口吗?或者他们是同一个东西?

like:ArrayList对应动态数组,HashMap对应Map

除了我没有看到任何用于动态数组之类的 Java API ,除非它是ArrayList

在那种情况下,它们将是同一件事!

大概他们是同一件事?

4

5 回答 5

2

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

于 2013-11-07T17:58:30.843 回答
2

是的。简而言之。

更详细的解释是,anArrayList是一个使用数组进行存储的集合,而不是链表、双向链表等。这意味着它提供了使用数组的所有好处,而 Java 会为您(动态地)处理调整数组大小的机制。

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

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

于 2013-11-07T17:59:25.057 回答
1

ArrayListList接口的可调整大小的数组实现。
因此,如果您需要动态数组,这可能就是您要寻找的东西。

于 2013-11-07T17:56:11.513 回答
1

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

于 2013-11-07T18:02:31.520 回答
1

如果在动态意义上你的意思是一个可以改变大小的数组,那么 aList是一个动态数组的接口。它之所以命名ArrayList是因为它在内部使用了一个数组。

您的类比不适合 java 集合框架,因为您可以说 anArrayList是一个动态数组,但Map(或HashMap就此而言)没有“原始”对应物。

于 2013-11-07T17:55:14.800 回答