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

5
5个回答

13

集合API是一组支持对象集合操作的类和接口。

类的示例:HashSet、HashMap、ArrayList、LinkedList、TreeSet和TreeMap。接口的示例:Collection、Set、List和Map。

其中: ArrayList是可调整大小的数组实现,属于集合中的“List”组。它允许包括null在内的所有元素。它不是线程安全的。

Collections实现了在集合上运行的多态算法。

Collection是集合层次结构中的根接口。

以下接口(集合类型)扩展了Collection接口:

  • List
  • Set
  • SortedSet
  • NavigableSet
  • Queue
  • Deque

Java没有带有可用实现的Collection接口,因此您必须使用列出的子类型之一。Collection接口仅定义了这些Collection子类型共享的一组方法(行为)。这使得可以忽略您正在使用的特定类型的Collection,并将其视为Collection。这是标准继承,因此没有任何魔术,但有时仍然是一个不错的功能。


在我看来,这不是对“琐碎问题”的回答。它没有解释为什么对象al和c在根本上是不同的。 - Marcos Gonzalez

5
第二个是面向接口编程。它允许将ArrayList替换为另一个Collection(例如VectorTreeSet)而不会产生任何副作用。

3

同一个对象被创建,但引用不同。

因此,在第二种情况下,您只能将您的ArrayList作为Collection来使用,除非进行强制类型转换。


“这个问题太简单了”,但只有这个答案才能击中问题的核心。 - Marcos Gonzalez

2
"Collection"是一个接口。看看它的方法。 List 接口有通过索引访问元素的方法。List还扩展了Collection接口。 ArrayList是实现了List接口的具体实现。
你正在进行一些抽象化操作。
如果你这样做:
Collection foo = new ArrayList();

你将无法访问List接口的方法,例如通过索引访问。

2
al 中,你只能使用 arraylists。你不能转换或强制转换除 arraylist 之外的任何东西。
c 中,你可以转换或强制转换任何实现 Collection 接口的类。

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