java中LinkedList的实现

java中LinkList集合也是使用双向链表实现,并提供了增删改查等操作

1、底层使用了双向链表
源码中add()方法调用了linkLast()方法,它将新节点放在之前的last后面,并变成新的last,不过要注意,它有一个属性first,不是我们平常定义的头结点(head),而是head的下一个结点,是会存储数据的

void linkLast(E e) {
        final Node<E> l = last;
        final Node<E> newNode = new Node<>(l, e, null);
        last = newNode;
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
        modCount++;
    }

2、结点类有三个域(prev,item,next)

private static class Node<E> {
        E item;
        Node<E> next;
        Node<E> prev;

        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }

ArrayList的查询操作是O(1)复杂度,因此当查询操作多时考虑顺序表
LinkedList的查询操作需要从头往后找,为O(n)复杂度,而插入和删除操作为O(n),与ArrayList一样,但LinkList为双向链表,物理地址不是连续的,不需要预先指定存储空间大小,也不需要扩容操作,也不存在元素交换操作,所以当增删操作多时,考虑链表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值