我的问题几乎是组成标题的oneliner。什么时候适合使用List interface
而不是Collection interface
?什么时候应该使用接口List <>而不是Collection <>
这只是一个关于清晰度和可读性的问题,即如果根据我的代码使用List
或Collection
或者我还没有其他一些我没有意识到的优点,则代码的意图更清晰?
我的问题几乎是组成标题的oneliner。什么时候适合使用List interface
而不是Collection interface
?什么时候应该使用接口List <>而不是Collection <>
这只是一个关于清晰度和可读性的问题,即如果根据我的代码使用List
或Collection
或者我还没有其他一些我没有意识到的优点,则代码的意图更清晰?
当你需要以下好处:
除了操作继承自Collection,该List interface包括操作以下:
列为
位置访问 - 根据列表中的数字位置操纵元素
个搜索 - 搜索列表中的指定对象,并返回其数值位置
迭代 - 扩展迭代器语义采取列表的顺序性优势
范围视图 - 名单上执行任意的范围内操作。
This question在衡量利弊方面做得很好。实质上,List
将一些额外的功能应用于Collection
,因为List
实际上是Collection
。
如果我是你,我会考虑你的代码的需求。如果您只需要添加和删除收集对象中的项目,那么您应该使用Collection
。
如果您希望保留排序,抓取特定索引的列表中的项目或删除给定位置的元素,则应该使用List
,因为Collection
不提供此功能。
这取决于。
如果您不在乎使用何种类型的集合,那么Collection<E>
将是合适的。如果您需要指定应使用List<E>
,Set<E>
等类型,请指定。
您还可以将Iterable<E>
添加到您的问题;这一切都取决于需要什么样的特异性水平。
可以这样说,假设当然,你不依赖于List的方法/特性,也没有其他的方法可以调用List。
有一种观点认为,最好使用适合作业的最一般类型,以允许可能导致切换到非List类的代码修改/重用。
还有它的最好使用涵盖所有计划采用最具体类型,有计划用途的领域中最强大功能和灵活性的说法。使用更具体的类型也是一种自我文档,它表示代码功能的狭隘性。
以我的经验代码重用的好处往往被夸大,而很少见效被多次使用的开发代码库之外。所以我倾向于使用更具体的类型。
阿门。提供更多关于实施的信息可让其他人智能地使用它。就我个人而言,我是想知道何时将数组支持列表与链表进行索引的类型。 – pamphlet
感谢您提出富有洞察力的评论,这是选择这个还是@SURESH ATTA的答案之间的艰难选择,我觉得这些都是非常丰富的,尽管他的观点更为重要,而你的回答可以帮助我成为一名开发人员。谢谢! :) –
这只是取决于你希望你的用户能够索引到的数据?如果是,请使用列表。两者都是接口,所以你不会泄漏实现细节,实际上,你只需要决定所需的最小功能。
如果对象您参考工具列表界面(例如数组列表,链表) - 当然,最好使用List参考。从我糟糕的经历 - 我不记得我上次在生产代码中看到Collection参考的时候。从来没有需要这样的抽象。如果合适,使用List更清晰。
的可能重复[是什么(的T)列表和收藏(T)的区别?(http://stackoverflow.com/questions/398903/what-is-the-difference-between-list- of-t-and-collectionof-t) – RamonBoza
当您使用'List'时。 –
如果您确定只使用'List',则使用'List'。如果你的方法一般应该支持'List's,'Set's和其他'Collection',那么使用'Collection'。 –