Java中Collection和List的区别是什么?

208

CollectionList在Java中有什么区别?应该在何时使用哪种?


1
公共接口列表扩展自集合。 - rai.skumar
7个回答

330

首先:ListCollection的一种。但它是一种专门的Collection

Collection就是一个项的集合。您可以添加、删除、迭代和查询其中有多少项。

List将定义的一系列内容的信息添加到其中:您可以获取位置为n的元素,可以在位置n添加元素,也可以删除位置为n的元素。

Collection中,您无法这样做:“此集合中的第5个元素”未定义,因为没有定义的顺序。

还有其他专门的Collections,例如Set,它添加了一项功能,即它永远不会包含相同的元素。


14
没错,列表是集合的一种有序特殊形式(但不是排序的),+1。 - atamanroman
2
Java中的List扩展了Collections接口,并构建了索引功能,有助于基于位置的检索和删除行为。 - frictionlesspulley

222

Collection 是 Java 集合层次结构的根接口。 List 是有序集合的一个子接口,其他子接口包括存储准备进行处理元素(例如堆栈)的 Queue

下图演示了不同 Java 集合类型之间的关系:

java collections


2
真的很喜欢你的图片,我在准备SCJP考试时看到过它,但是现在几乎忘记了所有这些东西。 - Truong Ha
1
我必须承认,这张图片是从这个博客中盗用的。我第一次看到这样的图表也是在K&B SCJP书中。 - krock
你可以从SCJP认证中学到很多东西,大部分关于这个主题的书籍都非常棒 :) - atamanroman
我猜Map不是一个Collection - giannis christofakis

10

Java API是最好的解答

集合(Collection)

在集合层次结构中,根接口。集合表示一组对象,其称为元素。某些集合允许重复元素,而其他集合不允许。有些是有序的,而其他则是无序的。JDK没有提供此接口的任何直接实现:它提供了更多特定子接口如Set和List的实现。该接口通常用于在需要最大通用性时传递集合并对它们进行操作。

列表(List)(扩展自集合)

一个有序的集合(也称为序列)。该接口的用户有精确控制每个元素在列表中插入的位置。用户可以通过它们的整数索引(在列表中的位置)访问元素,并在列表中搜索元素。

与集合不同,列表通常允许重复元素。更正式地说,列表通常允许成对的元素e1和e2,使得e1.equals(e2),如果它们允许空元素,则通常允许多个空元素。虽然可以想象某人希望通过在尝试插入它们时抛出运行时异常来禁止重复的列表,但我们预计这种用法很少见。


6
  • ListSet是Collection的两个子类。
  • 在List中,数据按照特定顺序排列。
  • 在Set中,不允许包含重复的数据。
  • 在Collection中,仅存储数据,没有特定的顺序,并且可以包含重复数据。

3

Collection是Java Collections层次结构的主要接口,List(Sequence)是定义有序集合的子接口之一。


3

Collection是List的超级接口,因此每个Java列表也是集合的实例。集合只能按顺序迭代(无特定顺序),而List允许通过get(int index)方法访问指定位置的元素。


2
Collection是一个高级接口,描述了能够包含其他对象集合的Java对象。它并没有具体说明如何访问它们,是否可以存在多个相同对象在同一集合中,或者顺序是否重要。而List则是一个特定的有序对象集合。如果按照特定顺序将对象放入List中,它们将保持这个顺序。
决定使用这两个接口的位置远不及决定使用哪种具体实现更为重要。这将对程序的时间和空间性能产生影响。例如,如果你需要一个列表,你可以使用ArrayList或LinkedList,每个都会对应用程序产生不同的影响。对于其他集合类型(例如Set),类似的考虑也适用。

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