JAVA进阶教学之(单链表数据结构)

什么是链表:

内存地址不连续,基本单元是节点对象Node,单链表尾结点默认是null

 

什么是链表中的节点:

节点是单链表中的基本单元,每一个节点都有两个属性

属性一:存储的数据

属性二:下一个节点的内存地址

 

什么是指针:

一个内存地址就是一个指针,当一个对象没有被指针指向的时候,对象会被垃圾回收机制回收

 

链表的优缺点有哪些:

优点:随机增删元素效率高(因为存储上内存地址不连续,增删元素不涉及到大量元素位移)

缺点:查询效率低(不能通过数学表达式计算被查找元素的内存地址,每一次查找每个元素的时候都需要从头结点开始往下遍历)

 

JVM示意图:

 

代码演示(Link的底层用代码进行演示):并不全面,只是了解即可

第一步:创建一个Node节点类

package com.lbj.javase.link;

/**
 * 节点
 */
public class Node {
    Object data;

    Node next;

    public Node() {

    }
    public Node(Object data, Node next) {
        this.data = data;
        this.next = next;
    }

}

第二步:创建一个Link链表类,类中提供调用方法

package com.lbj.javase.link;

/**
 * @author LBJ
 * @version V1.0
 * @Package com.lbj.javase.link
 * @date 2021/4/3 17:45
 * @Copyright 公司
 */
public class Link {
    //链表的头结点,默认值就是null
   Node next;

   //这段用来统计Link内元素的长度
   int size=0;
   public int size(){
       return size;
   }

   //向链表中添加元素的方法
   public void add(Object o){
       //创建一个节点对象
       //让之前单链表的末尾节点next指向新节点对象
       //有可能这个元素是第一个,也可能是第二个,第三个
       if(next==null){
           //说明还没有节点
           //new一个新的节点对象,作为头结点
           //这个时候的节点,既是一个头结点,又是一个末尾节点
           next=new Node(o,null);
       }else {
           //说明头结点已经存在了
           //找到当前末尾节点,让当前末尾节点的next是新节点
           Node currentLastNode=findLast(next);
           currentLastNode.next=new Node(o,null);
       }
       size++;
   }

    private Node findLast(Node node) {
       if(node.next==null){
           return node;
       }
       return findLast(node.next);//递归算法
    }

    //向链表中删除元素的方法
   public void remove(Object o){

   }

   //向链表中修改元素的方法
   public void modify(Object newObj){

   }

   //向链表中...
}

第三步:测试调用链表的方法进行链表元素添加

package com.lbj.javase.link;

public class Test {
    public static void main(String[] args) {
        //创建一个新的链表
        Link link=new Link();

        //往链表内添加元素
        link.add(100);
        link.add(200);
        link.add(300);


        System.out.println(link.size());

    }
}
//3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值