单链表插入节点JVM内存结构示意

以此链表代码为例

public class MyLinkedList<T> {

    class Node<T> {

        T data;

        Node<T> next;


        public Node() {

        }

    }


    Node<T> root = null;


    // 单链表的CURD
    // 新增
    public void addNode(T data) {
        Node<T> newNode = new Node<>(data);
        newNode.data = data;
        
        if (root == null) {
            root = newNode;
            return;
        }
        
		Node<T> temp = root;
        while (temp.next != null) {
            System.out.println(temp);
            temp = temp.next;
        }
        temp.next = newNode;
        
    }

    // 遍历查询
    public void forEach() {

        if (root == null) {
            System.out.println("链表为空!");
            return;
        }
        Node<T> temp = root;
        while (temp.next != null) {
            System.out.println(temp);
            temp = temp.next;
        }

    }


}

main方法:

    public static void main(String[] args) {
        MyLinkedList<Integer> list = new MyLinkedList<>();
        list.forEach();
        System.out.println("====");
        list.addNode(1);
        list.addNode(2);
        list.addNode(3);
        list.forEach();
        System.out.println("====");
        
    }

我们从main方法入手,一行一行代码解析

  1. 类加载,MyLinkedList.java经过javac和java的指令之后,进入方法区,保存自己的类加载信息,包括成员变量,成员方法
    在这里插入图片描述

  2. 随后进入main方法,会在JVM的线程栈中创建main方法的栈帧
    在这里插入图片描述

  3. main方法创建了一个MyLinkedList的对象,list变量存放在栈中,new出来的对象存放在堆中
    在这里插入图片描述

  4. 调用addNode方法,在栈中创建addNode方法的新栈帧,并将方法形参data,新声明的newNode,temp都压入栈中
    在这里插入图片描述

  5. newNode会在堆中创建新的Node,插入到链表的末尾;temp复制了head指针,初始指向头结点
    在这里插入图片描述

  6. 方法调用结束后,addNode方法栈帧出栈,随后在堆中插入头结点,由头指针head指向这个结点,data值为1
    在这里插入图片描述

  7. 如法炮制,插入剩下的结点
    在这里插入图片描述

  • 20
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值