Java中列表和集合之间的区别
内容
List and Set接口扩展了Collection。它们都维护元素或对象的集合。但是,将它们彼此区分开的主要区别是List是有序元素的集合,这些元素是在索引变量的帮助下添加或删除或访问的。另一方面,Set是对象的集合,其中该集合不允许其中有重复的元素。让我们借助下面显示的比较表研究List和Set接口之间的更多区别。
- 比较表
- 定义
- 关键差异
- 结论
比较表
比较基础 | 清单 | 组 |
---|---|---|
基本的 | 列表维护列表中存储的元素的顺序。 | Set不会特别维护插入顺序,但是Linked HashSet会维护插入顺序。 |
复制 | 列表中可能包含重复的元素。 | 如果您尝试插入重复的元素,则add()方法将返回false。 |
方法 | 除了在Collection中定义的方法外,List还定义了一些自己的方法。 | Set没有定义任何其他方法。 |
实作 | 列表由ArrayList,LinkedList,CopyOnWriteArrayList,Vector,Stack实现。 | Set由HashSet,LinkedHashSet,EnumSet,TreeSet,CopyOnWriteArraySet实现。 |
清单的定义
List接口扩展了Collection接口。列表是元素或对象的有序集合。与Set不同,List可能包含重复的元素。除了在“收集列表”中定义的方法外,还定义了一些自己的方法,例如基于索引的get()和set()方法。从Collection继承的add()和remove()方法可从方法参数中指定的索引中添加或删除指定的元素。 List是一种数组,其大小会随着我们向列表中添加元素而增加。
List没有定义任何对列表中的索引范围进行操作的方法。它定义了sublist()方法,该方法从指定范围的原始列表中返回一个子列表。您对子列表所做的更改也会显示在原始列表中。 List接口由ArrayList,LinkedList,CopyOnWriteArrayList,Vector,Stack实现。
集的定义
Set接口扩展了Collection接口。 Set接口是一个集合或一组对象,其中没有任何重复的对象。这意味着两个引用不能引用一个对象,或者一个引用不能引用两个对象,或者不能有两个引用为Null的引用。元素的顺序或顺序并不重要Set,但并不是禁止有序集合。
除Collection中定义的方法外,Set接口未定义任何方法。相反,它限制了collection的add()和addall()方法以在集合中添加任何重复的对象。如果尝试使用Collection的add()方法在集合中添加任何重复的对象,它将返回false。否则,它返回true。 Set接口由HashSet,LinkedHashSet,EnumSet,TreeSet,CopyOnWriteArraySet实现。
- 集合中元素/对象的顺序在List中维护,而Set不维护元素的顺序,但LinkedHashSet例外,维护插入顺序。
- List可以具有重复的元素,因为它可以标识具有其索引的任何元素,但是Set不允许任何重复的元素,因为它没有任何索引种类的元素来标识集合中的任何对象。
- 除Collection中定义的方法外,List还单独定义了一些方法。另一方面,Set并没有定义自己的任何方法,但是它限制了Collection方法添加任何重复的元素。
- 列表是通过ArrayList,LinkedList,CopyOnWriteArrayList,Vector,Stack接口实现的。另一方面,通过HashSet,LinkedHashSet,EnumSet,TreeSet,CopyOnWriteArraySet接口实现Set。
结论:
List和Set接口的使用取决于需求。如果对象/元素的顺序很重要,则必须使用List界面。如果您的集合中不需要任何重复的元素,则必须使用Set接口