我什么时候应该使用接口List<>代替Collection<>

时间:2013-10-10 15:55:23

标签: java collections interface

我的问题几乎就是组成标题的oneliner。什么时候使用List interface而不是Collection interface

这只是一个关于清晰度和可读性的问题,即如果我根据我的代码使用ListCollection,或者我还有其他一些优势,那么代码的意图会更清晰我不知道?

6 个答案:

答案 0 :(得分:4)

当然,假设您不依赖于List的方法/功能,并且您将调用的其他方法都不希望List。

有一种观点认为最好使用最适合这项工作的通用类型,以允许代码修改/重用,这可能导致切换到非List类。

还有一种观点认为,最好使用包含所有计划用途的最具体类型,以便在计划用途的范围内拥有最大的权力和灵活性。使用更具体的类型也是一种自我文档,因为它表明代码功能的狭隘性。

根据我的经验,代码重用的好处往往被夸大,并且很少在为多次使用而开发的代码库之外产生结果。所以我倾向于使用更具体的类型。

答案 1 :(得分:3)

当您需要以下好处时:

  

除了从Collection继承的操作外,List interface还包括以下操作:

列为

  

位置访问 - 根据列表中的数字位置操作元素

     

搜索 - 搜索列表中的指定对象并返回其数字位置

     

迭代 - 扩展Iterator语义以利用列表的顺序性

     

Range-view - 对列表执行任意范围操作。

答案 2 :(得分:1)

This question在衡量利弊方面做得很好。从本质上讲,List会将一些额外的功能应用于Collection,因为List实际上是Collection

如果我是你,我会考虑你的代码的要求。如果只需要在集合对象中添加和删除项目,则应使用Collection

如果您希望保留排序,请抓住列表中特定索引处的项目或删除指定位置的元素,然后您应该使用List,因为Collection不提供此功能。

答案 3 :(得分:1)

这取决于,您是否希望您的用户能够索引数据?如果是,请使用List。两者都是接口,因此您不会泄漏实现细节,实际上,您只需要确定所需的最低功能。

答案 4 :(得分:0)

取决于。

如果您不关心使用何种类型的集合,那么Collection<E>将是合适的。如果您需要指定应使用List<E>Set<E>等类型,请指定该类型。

您还可以在问题中添加Iterable<E>;这一切都取决于需要什么样的特异性。

答案 5 :(得分:0)

如果您引用的对象实现List接口(例如ArrayList,LinkedList) - 当然最好使用List引用。从我糟糕的经历 - 我不记得我上次在生产代码中看到集合引用。从来不需要这样的抽象。如果合适,使用List会更清楚。