2

可能重复:
使用 Collection 接口创建 ArrayList 对象的多态性有什么好处?

 ArrayList al=new ArrayList();
 Collection c=new ArrayList();

objectal和 和有什么不一样c?他们两个是一样的还是什么?

4

6 回答 6

11

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

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

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

集合:它实现了对集合进行操作的多态算法。

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

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

  • 列表
  • 排序集
  • 导航集
  • 队列
  • 双端队列

Java 不附带 Collection 接口的可用实现,因此您必须使用列出的子类型之一。Collection 接口只定义了这些 Collection 子类型中的每一个共享的一组方法(行为)。这使得可以忽略您正在使用的特定类型的集合,并将其视为集合。这是标准继承,所以没有什么神奇之处,但有时它仍然是一个不错的功能。

于 2013-01-11T06:14:13.890 回答
4

第二个是接口编码。它允许ArrayList将 替换为另一个Collection(例如VectorTreeSet)而没有任何副作用。

于 2013-01-11T06:09:11.697 回答
3

创建了相同的对象,但引用不同。

因此,在第二种情况下,除非强制转换,否则您可以将ArrayListonly 视为 just 。Collection

于 2013-01-11T06:07:59.687 回答
2

Collection是一个接口。看看方法。

List 接口具有按索引访问的方法。List 还扩展了Collection接口。

ArrayList是实现List接口的具体实现。数组列表

你正在做的是一些抽象。

如果你这样做:

Collection foo = new ArrayList();

您将无法访问List接口方法。比如用索引访问。

于 2013-01-11T06:10:51.290 回答
2

al你被阻止只使用数组列表。除了arraylist,你不能转换/转换任何东西。

c您可以转换/转换任何实现该Collection接口的类。

于 2013-01-11T06:12:50.473 回答
2
Collection foo = new ArrayList();

这个更通用,你可以获得 Collection 的其他实现的好处。

于 2013-01-11T06:15:08.427 回答