java数据结构2------深入学习LinkedList

本文详细介绍了LinkedList的概念,源码中节点结构和常用方法(get,add,set,remove),强调了LinkedList在插入和删除操作上的优势,以及与ArrayList在查询效率上的区别。
摘要由CSDN通过智能技术生成

目录

一、概念

二、源码分析

1、属性

2、节点结构

3、常用方法

①get(int index)  

②add(E e)

③set(int index, E element)

④remove(int index)

三、总结


一、概念

LinkedList 是一种基于链表的集合,用双向链表实现的,提供了高效的插入和删除操作。

二、源码分析

1、属性

first表示第一个节点
last表示最后一个节点

2、节点结构

每一个节点记录了当前节点、上一个 节点、下一个节点。

3、常用方法

①get(int index)  
        //先判断在双向链表的前半段,还是后半段,然后找对应index

        if (index < (size >> 1)) {
            Node<E> x = first;
            for (int i = 0; i < index; i++)
                x = x.next;
            return x;
        } else {
            Node<E> x = last;
            for (int i = size - 1; i > index; i--)
                x = x.prev;
            return x;
        }

前面讲过ArrayList的底层是数组,可以直接通过index得到结果,所以查询效率上ArrayList更快

②add(E e)

LinkedList只需要在链表最后加一个节点,而ArrayList由于底层是数组,在空间不足时要扩容,所以添加元素LinkedList效率高

③set(int index, E element)

查询index对应的节点,将这个节点的item改为传入的element

④remove(int index)

查询index对应的节点,将前一个节点与后一个节点连接

三、总结

LinkedList 基于双向链表实现的,节点地址是任意的,所以不用开辟内存空间连续的地址,LinkedList 在插入、删除操作时效率优于ArrayList,查询则ArrayList更快。
  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值