Java- Stack与LinkedList实现。

本文探讨了使用Stack类和LinkedList类实现栈的不同之处。通过示例代码展示两种实现方式的输出结果,并从源码层面解析了这两种实现方式的具体工作原理及内部结构差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们都知道栈有两种实现方式。

一个用Stack类。一个用LinkedList类实现。那么它们之间有什么不同呢?

我们先用一段代码显示一下。

public static LinkedList<String> stack;
public static Stack<String> stack1;
public static LinkedList<String> list;
public static void init(){
    stack1 =new Stack<>();
    stack1.push("1");
    stack1.push("2");
    stack1.push("3");
    stack1.push("4");

    stack=new LinkedList<>();
    stack.push("1");
    stack.push("2");
    stack.push("3");
    stack.push("4");

    list=new LinkedList<>();
    list.add("1");
    list.add("2");
    list.add("3");
    list.add("4");
    System.out.println(stack1);
    System.out.println(stack);
    System.out.println(list);
}

输出结果为:
[1, 2, 3, 4]
[4, 3, 2, 1]
[1, 2, 3, 4]

可以发现Stack实现、与LinkedList实现的输出是不一样的。顺序刚好是相反的。

其实我们通过源码分析:

Stack类实现时,push和pop。都是对数组最高下标成员进行操作。从而实现后进先出(LIFO)。

但是,LinkedList进行push和pop操作时,是通过对链表first节点进行操作的,得到LIFO的效果。

用一个图来表示就是:

Stack中存储形式为:

1234

  q:栈底                                                                                p:栈顶

 

LinkedList中存储形式为:

为什么会有这样的差异呢?

其实主要还是因为Stack是用数组实现的。而LinkedList用链表实现的。

可以想想一下,如果Stack在elementData[0]进行push和pop。那么每一次都要对后面的成员进行位置调整。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值