可能重复:
What is the benefit of polymorphism using Collection interface to create ArrayList object?
ArrayList al=new ArrayList();
Collection c=new ArrayList();
对象al
和c
之间有什么区别?它们都是相同的还是什么?
答案 0 :(得分:11)
Collections API是一组类和接口,支持对对象集合的操作。
类的示例:HashSet,HashMap,ArrayList,LinkedList,TreeSet和TreeMap。 接口示例:集合,集合,列表和映射。
然而, ArrayList:它是可重新调整大小的数组实现。属于集合中的“列表”组。它允许所有元素,包括null。它不是线程安全的。
集合:它实现了对集合进行操作的多态算法。
Collection:它是集合层次结构中的根接口。
以下接口(集合类型)扩展了Collection接口:
Java没有可用的Collection接口实现,因此您必须使用列出的子类型之一。 Collection接口只定义了每个Collection子类型共享的一组方法(行为)。这使得可以忽略您正在使用的特定类型的Collection,并将其视为Collection。这是标准的继承,所以没有什么神奇之处,但它仍然可以是一个很好的功能。
答案 1 :(得分:4)
第二个是coding to interfaces。它允许将ArrayList
换成另一个Collection
(例如Vector
或TreeSet
),而不会产生任何副作用。
答案 2 :(得分:3)
创建了相同的对象,但引用不同。
因此,在第二种情况下,您可以仅使用ArrayList
Collection
,只需{{1}},除非进行投射。
答案 3 :(得分:2)
Collection
是Interface。看看方法。
List
interface具有按索引访问的方法。 List还扩展了Collection
接口。
ArrayList
是实现List
接口的具体实现。 ArrayList的
你正在做的是一些抽象。
如果你这样做:
Collection foo = new ArrayList();
您无法访问List
接口方法。例如使用索引访问。
答案 4 :(得分:2)
在al
中,您被禁止仅使用arraylists。除了arraylist之外,你不能转换/投射任何东西。
在c
中,您可以转换/转换任何实现Collection
接口的类。
答案 5 :(得分:2)
Collection foo = new ArrayList();
这个更通用,你可以从Collection的其他实现中获益。