2013-10-10 39 views
5

我的问题几乎是组成标题的oneliner。什么时候适合使用List interface而不是Collection interface什么时候应该使用接口List <>而不是Collection <>

这只是一个关于清晰度和可读性的问题,即如果根据我的代码使用ListCollection或者我还没有其他一些我没有意识到的优点,则代码的意图更清晰?

+0

的可能重复[是什么(的T)列表和收藏(T)的区别?(http://stackoverflow.com/questions/398903/what-is-the-difference-between-list- of-t-and-collectionof-t) – RamonBoza

+0

当您使用'List'时。 –

+0

如果您确定只使用'List',则使用'List'。如果你的方法一般应该支持'List's,'Set's和其他'Collection',那么使用'Collection'。 –

回答

2

当你需要以下好处:

除了操作继承自Collection,该List interface包括操作以下:

列为

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

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

迭代 - 扩展迭代器语义采取列表的顺序性优势

范围视图 - 名单上执行任意的范围内操作。

1

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

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

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

0

这取决于。

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

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

4

可以这样说,假设当然,你不依赖于List的方法/特性,也没有其他的方法可以调用List。

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

还有它的最好使用涵盖所有计划采用最具体类型,有计划用途的领域中最强大功能和灵活性的说法。使用更具体的类型也是一种自我文档,它表示代码功能的狭隘性。

以我的经验代码重用的好处往往被夸大,而很少见效被多次使用的开发代码库之外。所以我倾向于使用更具体的类型。

+0

阿门。提供更多关于实施的信息可让其他人智能地使用它。就我个人而言,我是想知道何时将数组支持列表与链表进行索引的类型。 – pamphlet

+0

感谢您提出富有洞察力的评论,这是选择这个还是@SURESH ATTA的答案之间的艰难选择,我觉得这些都是非常丰富的,尽管他的观点更为重要,而你的回答可以帮助我成为一名开发人员。谢谢! :) –

1

这只是取决于你希望你的用户能够索引到的数据?如果是,请使用列表。两者都是接口,所以你不会泄漏实现细节,实际上,你只需要决定所需的最小功能。

0

如果对象您参考工具列表界面(例如数组列表,链表) - 当然,最好使用List参考。从我糟糕的经历 - 我不记得我上次在生产代码中看到Collection参考的时候。从来没有需要这样的抽象。如果合适,使用List更清晰。

相关问题