Java中的集合类型:列表、队列和集合

31

列表、队列和集合有什么区别?

1个回答

84

简言之:

列表是一组有序的对象,同一个对象可能会出现多次。例如:[1, 7, 1, 3, 1, 1, 1, 5]。在列表中讲第三个元素是有意义的。您可以在列表的任何位置添加、更改或删除元素。

队列也是有序的,但是您只会在一个端点接触到元素。所有元素都从队列的“末尾”插入并从“开头”(或头部)移除。您可以找出队列中有多少元素,但您不能确定哪个是“第三个”元素。直到您遍历完它,才能看到它。

集合没有顺序,并且不允许重复项。任何给定的对象要么在集合中,要么不在集合中。{7,5,3,1} 与 {1, 7, 1, 3, 1, 1, 1, 5} 是完全相同的集合。您同样无法询问“第三个”元素或甚至“第一个”元素,因为它们没有任何特定的顺序。您可以添加或删除元素,并查找某个元素是否存在(例如,“这个集合中是否有7?”)


12
您认为 {1, 7, 1, 3, 1, 1, 1, 5} 存在重复数据,但是 Java 不这么认为。换句话说,即使已经存在相同的对象,您仍然可以将该对象添加到集合中,这种添加操作不会改变集合的内容或执行任何操作的结果。这与列表不同,向列表中添加另一个 "1" 将创建一个基本上不同的列表。 - VoteyDisciple
1
一般来说,在计算机科学中,队列是FIFO(从“末尾”插入并从“开头”删除),就像您所描述的那样,但Java接口实际上并不要求这样。 Java的Queue接口的实现可以以不同的顺序返回元素,例如LIFO或基于某些指定的排序,或者对于特定实现而言有意义的任何内容。 - Vineet
@VoteyDisciple 我不理解 {1, 7, 1, 3, 1, 1, 1, 5} 的例子...一个集合怎么可能有重复的元素呢? - HopeKing
1
@Ratatouille,你认为这个集合包含重复元素,是因为你看到所有数字都排成一行,然后数出有多少个1。但这不是集合的工作方式。你每次只添加一个值,并且只跟踪你已经看到了哪些值。想象一下,我让你记录我去过哪些城市。“我去了伦敦、纽约、伦敦、波士顿,然后又去了伦敦。”那么我去过哪里?你会说“纽约、伦敦和波士顿”。你的工作不是数我去了伦敦多少次,而我的工作也不是记住我已经告诉你两次了。这就是为什么我们需要集合的原因。 - VoteyDisciple
4
一个集合可以有序,TreeSet 是有序的。 - Jonathan Vukadinovic
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接