何时使用每个Java集合数据结构

何时使用每个Java集合数据结构,java,data-structures,Java,Data Structures,我看到有一吨的水。它们都实现了列表,所以它们几乎可以互换使用,但我想什么时候使用它们呢?就我个人而言,我坚持使用LinkedList,因为它是我熟悉的东西。我不是要解释每一个结构,但你能解释一些更常见的结构并给出它们的用途,以及比较和对比向量式结构的用途吗?一个人经常使用向量向属于同一集合的结构添加元素,但与同一集合中的其他成员没有任何关系。LinkedList表示集合成员之间存在某种重要的排序。这取决于您所寻找的性能特征和行为 例如,在LinkedList中,添加、删除和检索是O1、O1和On

我看到有一吨的水。它们都实现了列表,所以它们几乎可以互换使用,但我想什么时候使用它们呢?就我个人而言,我坚持使用LinkedList,因为它是我熟悉的东西。我不是要解释每一个结构,但你能解释一些更常见的结构并给出它们的用途,以及比较和对比向量式结构的用途吗?

一个人经常使用向量向属于同一集合的结构添加元素,但与同一集合中的其他成员没有任何关系。LinkedList表示集合成员之间存在某种重要的排序。

这取决于您所寻找的性能特征和行为


例如,在LinkedList中,添加、删除和检索是O1、O1和On,而对于ArrayList,如果使用getint,则相同的操作是On、On和O1,如果使用getObject,则相同的操作是On、On和On。但是,ArrayList每个条目使用的内存比LinkedList少。

?许多集合不实现列表。有相当多的列表实现,但也有相当多的集合不是列表。这是一个巨大的问题。答案很简单,始终使用最适合您所解决问题的数据结构。开始阅读:如果需要同步,请使用vector类。根据需要使用ArrayList或linkedlist,因为搜索、添加或删除元素的复杂性不同。不要在新代码中使用vector。否则,如果需要随机访问,请使用ArrayList;如果需要大量插入和删除,尤其是从中间插入和删除,请使用LinkedList。这基本上是一个经典的CS数据结构问题。数组列表上的检索是O1,不是吗?@williammerrison不,它仍然必须迭代每个索引并执行.equals。我的意思是getint索引。我现在明白你的意思了。虽然从技术上讲,添加、删除和检索的某些定义可能是正确的,但这仍然是对差异的完全误导和不充分的描述-1@delnan我的目的不是要对链表和数组列表之间的各种差异进行学术解释,这就是为什么我只举了一个例子。-1->通常不应该使用向量,因为它是同步的,应该更喜欢数组/链表。事实上,你写的所有东西都是胡说八道的。t:性能问题可以稍后再问。。我们需要线程安全且易于使用的实现。向量确实有它的位置。问题是为什么一个人可以使用一种结构而不是另一种。这是一个关于为什么可以在LinkedList上使用向量的示例。基于如何将数据结构用于正在解决的特定问题,还有一些额外的编程考虑。我不同意:我们已经开始讨论数据结构的最佳用途,但问题是为什么不一直使用单一的数据结构。关于Vector的性能考虑对许多问题都很重要,但这不是Vector被用作示例数据结构而不是LinkedList的问题,因为在我们讨论性能考虑之前,它演示了结构是如何不同的。如果您已经阅读了我发布的内容,那么您应该已经理解了,这个向量被设计破坏了,我们不应该使用它。不管怎样,我并没有因为向量而否决你的问题,而是因为你所说的一切都是错误的。