Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使用基于向量的堆栈实现而不是链表的动机是什么?_Java_Algorithm_Data Structures_Linked List - Fatal编程技术网

在Java中使用基于向量的堆栈实现而不是链表的动机是什么?

在Java中使用基于向量的堆栈实现而不是链表的动机是什么?,java,algorithm,data-structures,linked-list,Java,Algorithm,Data Structures,Linked List,在Java中使用基于向量的堆栈实现而不是链表实现的动机是什么?我意识到向量是同步的,具有继承优势(和开销),但我觉得这些数据结构不仅通常在文本中作为基于链表的结构教授,而且在底层数组填充时避免了代价高昂的大小调整 我确实理解,使用摊销分析的向量,即使调整大小也为O(1)。因此,考虑到这一点,这并没有多大区别,但我还是很想理解其基本原理。向量将其数据存储在连续内存中。这有利于缓存 链表在内存中可能会变得非常零碎。链表有以下缺点: 每元素存储开销 从一个元素到另一个元素必须遵循指针/引用的计算复杂

在Java中使用基于
向量的
堆栈实现而不是链表实现的动机是什么?我意识到
向量
是同步的,具有继承优势(和开销),但我觉得这些数据结构不仅通常在文本中作为基于链表的结构教授,而且在底层数组填充时避免了代价高昂的大小调整


我确实理解,使用摊销分析的
向量
,即使调整大小也为O(1)。因此,考虑到这一点,这并没有多大区别,但我还是很想理解其基本原理。

向量将其数据存储在连续内存中。这有利于缓存


链表在内存中可能会变得非常零碎。

链表有以下缺点:

  • 每元素存储开销
  • 从一个元素到另一个元素必须遵循指针/引用的计算复杂性
  • 错误的缓存位置

当然,这些只是链表的一般缺点;我不知道它们是否影响了
Queue
Stack
基于什么的决策。

这与ArrayList相比如何?在其他任何人抱怨之前,Stack和Vector都被认为是不受欢迎的。你应该考虑使用<代码> ARAYLIST/<代码>,如果需要同步,则将ARARYLIST与集合同步。您可以将多个变量存储在一个对象中,并将该对象作为一个条目存储在向量中。@Matt就像您使用ArrayList一样,没有所有的cruft,并且能够将它与collections API一起使用。
vector的原始同步技术几乎从来都不是您真正需要的,即使您确实需要某种同步。这就是为什么
Vector
即将推出的原因。对于这个特定问题,
ArrayDeque
可能是
Stack
的现代替代品。第二点不会以任何方式影响堆栈,因为您只需要在一端工作,所以您可以将该端作为头部。对于队列,带有指向最后一个节点的指针的双链接列表可能会起作用,但我不是100%确定。