java 链表入门

什么是链表?

链表是一种数据结构,比如最简单的,单向链表
如图,单向链表中有很多节点,然后每个节点分2部分,一部分保存节点信息,另一部分保存下一个节点的信息. 可想而知,这种结构,插入数据会很快.但是,查找数据会比较慢.这个慢是与数组相比而言的,数组查找用的是索引,链表查找需要遍历.遍历当然会慢!
在这里插入图片描述
在这里插入图片描述

用编程语言,大概就是

public class LinkedList<Item> {
    private Node first;

    private class Node {
        Item data;
        Node next;
    }

    ...

}

另一种,双向链表

`在这里插入图片描述

链表有什么用?

从定义可以看出来,就是插入速度很快. 如果需要经常插入数据,就可以选择链表结构.

java中如何应用链表?

java中LinkedList在添加数据时就用的链表结构,
在这里插入图片描述
以添加 list.add(3);为例看一下执行过程

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list=new LinkedList<>();
        list.add(3);
        list.add(4);
    }
}

利用idea步入一步一步分析变量变化过程
看一下过程.调用linkLast方法
在这里插入图片描述
linkLast中参数e为3在这里插入图片描述

截至目前newNode的前一个和后一个节点都是null
在这里插入图片描述
调用Node构造函数,构建新Node
在这里插入图片描述
将刚才构造好的newNode赋值给last,因为添加元素默认都是添加到List的最后面.
在这里插入图片描述
如果l(就是前一个元素)为null,说明是第一个,那么将newNode设为first.因为是插入第一个元素,这个元素既是第一个,也是最后一个.
在这里插入图片描述
如果前一个节点不为空,则执行else部分.

add总结

  • add方法的关键是调用了linkLast方法.
  • linkLast主要构建了一个新Node,而构建一个新Node,只需要pre,element,next就足够了,这是一个双向链表.
  • 插入元素的本质就是更新链表前一个元素的next值.
    比如.设原先数组只有一个元素{3} ,那么就是
    Node1-> null,3,null
    当插入一个新元素4后,则变成
    Node1 -> null,3,4
    Node2->3,4,null
 public boolean add(E e) {
        linkLast(e);
        return true;
    }
/**
     * Links e as last element.
     */
    void linkLast(E e) {
        final Node<E> l = last;
        //创建新Node,e为待插入的元素
        final Node<E> newNode = new Node<>(l, e, null);
        //将新Node赋值为last
        last = newNode;
        //如果前一个元素为null,说明新元素是第一个元素,所以将newNode赋值为first
        if (l == null)
            first = newNode;
        //如果前一个元素不为null,就更新l的next为newNode.原先l的next为null,现在更新为newNode.
        else
            l.next = newNode;
            //list的长度+1
        size++;
        modCount++;
    }

总结

链表就是一种方便插入,但是查找较慢的数据结构.使用时其实感觉不到其存在.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值