为什么使用不使用链表的数组实现Stack?
如果你使用添加到前面并在链接列表中从前面删除它可能是实现堆栈的有效方法,而不是在75%或某个阈值满时增加数组的大小。
答案 0 :(得分:2)
如果你在链表中使用添加到前面并从前面删除它可能是实现堆栈的有效方法,而不是在75%或某个阈值满时增加数组的大小。
权衡取舍比这更复杂。
使用链表实现的堆栈每个堆栈条目的空间需要是基于数组的实现的3或4倍。
基于数组的堆栈具有可预测的位置,而表示链接列表条目的对象可能分散在整个堆中。
如果基于数组的数据结构在填满时按固定百分比展开,并且堆栈的使用寿命很长,那么扩展的成本就会摊销,变得无关紧要。
< / LI>另一方面,基于链表的实现确实具有在堆栈清空时释放空间(即符合GCing条件)的优势。
简而言之,根据堆栈的使用方式,不同的实现方法会更好。但是Stack
实现者必须选择一个。
另一点是,在引入集合框架之前,Stack
是Java 1.0中存在的一个非常古老的类。实现的API和方面受到向后兼容性的限制。
如果您想要更好的API和更好(或不同)的性能特征,请查看实现Dequeue
接口的类。
答案 1 :(得分:0)
Stack不需要访问第一个元素,push / pop / peek只能使用最后一个元素,而数组对此有好处。