Java集合框架中数组和任何集合之间的区别是什么?

18

正如标题所述,我正在研究“Java集合框架中数组和任何集合之间的区别”。

尽管这个话题有点高级,但它可以为我们中的一些人(或许是很多人)提供一些好的理解,因为我们对此知之甚少,或者需要花费太长时间来想出一个有趣的答案。

到目前为止,我得出了以下结论:

  1. 集合框架类要么在底层使用数组,要么使用更复杂的数据结构。而数组仅仅只是一个数组。
  2. 数组没有像集合类提供的那些方法(没有API)。

如果我上面的观点有误,请纠正我,并添加你自己的答案。


2
数组确实有方法,比如排序... - PermGenError
2
数组不实现Iterable - Adam
正如我刚读到的文档所述:说“结构A比结构B更快/更慢”从来不是真的。说“在结构A上运行函数F比在结构B上更快/更慢”可能是真的,也可能不是真的。因此,在这里尝试比较性能是无关紧要的。 - Adriano
2
数组没有一个叫做 sort 的方法。正确的是 Arrays.sort() - jedyobidan
此外,大多数集合不会将它们的数据存储在数组中。目前我能想到的只有 ArrayList、PriorityQueue 和 Stack。 - jedyobidan
4个回答

38

虽然它们都可以存储一组值,但实际上它们没有太多关联。

从能力的角度来看,尽管两者都可以存储对象引用:

  • 数组可以存储基本类型数据
  • 集合不能存储基本类型数据(尽管它们可以存储基本包装类,例如Integer等)

一个重要的区别,通常被新手程序员忽略的是可用性和便利性,特别是考虑到集合在需要时会自动扩展大小的情况下:

  • 数组-除非你必须使用它们,否则避免使用
  • 集合-与数组相比优先使用它们

数组最终是一种将原语/引用组存储在一个对象中的唯一方法,但它们是最基本的选项。尽管数组可能带来一些速度优势,但除非你需要超级快速的代码,否则建议使用集合,因为它们非常方便。


9
为什么被踩了?这个回答为什么被认为“不帮助”(这就是踩的意思)。 - Bohemian
3
@kapep 是的 - 当我重新阅读我的回答时,我也注意到了。你的评论让我感到羞愧,因此我编辑了一下以澄清 :) - Bohemian
2
我建议在可以使用数组时使用它们,在需要使用添加和删除操作的情况下则使用集合。数组更快且更节省空间,只要您不需要ArrayList的添加和删除操作。 - jedyobidan
1
@jedyobidan ArrayList只是众多集合中的一种。例如,Sets提供了强大的“唯一元素”功能。 - Bohemian
2
@jedyobidan 我同意你的观点,但有两个重要的要点:在考虑使用数组时必须知道该使数组多大(并非总是可能的),而集合仍然相当快(您必须测量纳秒才能看到差异)。 - Bohemian
显示剩余2条评论

12

以下是Array和Collection之间的5个区别:

  1. 数组大小固定,而某些集合具有可扩展性。

  2. 数组存储同质数据。集合既可以存储同质数据,也可以存储异质数据。

  3. 数组中没有底层数据结构,而集合有底层数据结构。

  4. 建议使用数组以获得更好的性能,而不推荐使用集合。

  5. 相比于集合,数组使用更多的内存空间。


3
数组使用更多的内存空间 - 为什么? - Woland

4
  1. 数组长度固定,而集合具有可扩展性。
  2. 数组只能存储同类元素,而集合可以存储不同类型的元素。
  3. 如果您事先知道大小,请选择数组。
  4. 从性能角度来看,最好选择数组。
  5. 数组没有任何现成的方法,而集合有现成的方法。

2
数组集合的6个区别如下:
  1. 数组大小固定,而集合大小动态。
  2. 就内存而言,数组不好用,但就内存而言,集合更好用。
  3. 就性能而言,最好使用数组,但就性能而言,集合不好用。
  4. 数组只能容纳同种元素,而集合可以容纳同种和异种元素。
  5. 数组没有现成的方法,但集合有现成的数据结构和方法。
  6. 数组可以容纳基本类型和包装对象,但集合只能容纳对象。

就内存而言,使用集合更好 - 为什么? - Woland

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