Java 集合List攻略3:LinkedList

吐槽:这个数据结构有点意思,其余的都是数组,就他是链表,值得一看,考核的基本功
1 数据结构
老规矩,先上图
在这里插入图片描述

兄弟们,我们明显看到有俩Node first last 我们先点进去瞅瞅吧

在这里插入图片描述

小伙伴们,这是个高级货啊,静态内部类(这种高级货 以后专门写一篇,不要在意就把他当做普通类暂时先),标准的双向链表形势,存储本身元素的同时还存储他的前后指针,老铁666啊

但是回过头来,问题来了,为毛还有个first last区分呢?
看他的注释,英文注释,哦哦,明白了,他娘的他把开头第一个节点的跟结尾最后一个节点单独拎出来了,为啥呢,咱们继续往下看 MMP 蚂蚁看了十几分钟才看懂

2 add方法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
蚂蚁用注释把原因解释了,就不再赘述了,Last跟first的意思近似,就不赘述了

3 remove方法

remove方法有好几个remove removeFirst removeLast,稍微看看在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

删除方法,感觉没啥好讲的,不看源代码都能猜出来,肯定是遍历找到元素,删除前后元素的指针
Game Over,其实主要是其数据结构 其存储的数据结构决定了其插入删除 查询等等,所以数据结构是基本功啊小伙伴们,回去多啃啃数据结构吧

查询:get方法
LinkedList底层的数据结构是双向链表,他对于元素的查找方式是顺序查找,即是从第一个元素出发,经过n个节点找到最终的节点

源码如下
在这里插入图片描述
在这里插入图片描述
可以看到,他虽然做了一次判断,二分查找,但是遍历次数还是顺序查找,远远没有数组的随机查找来的快,查询效率非常的差

因此,使用get()方法的效率极其的低下,而for循环遍历用的都是for,这也是为什么LinkedList遍历不使用for循环的原因 而使用Iterator迭代器的原因

问题升级
遍历的方式有三种
1、传统的for循环遍历,基于计数器的:基于get方法进行获取元素
2、迭代器遍历,Iterator:基于hasnext next
3、foreach循环遍历:类似于Iterator
这三种方案该如何去选择呢?
大家可以思考下,一般数组类型的就直接用for,链表使用LinkedList,不过有一个注意事项,那就是你不能在遍历的时候去做删除或者插入操作,这样会发生异常

大家可以思考下,实在想不到点击如下链接
[https://blog.youkuaiyun.com/farxix/article/details/102920658]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值