}
分析:LinkedList作为链表结构,先用l这个Node对象去拿到last尾节点,创建出新节点,把newNode的给到last这个尾节点去,如果l为空,就说明一开始没有尾节点,那就吧newNode的值给到first头节点去,反过来,如果非空,就说明链表非空,那么就是在l的next赋值到newNode,即l的next指向这个新的节点去。因为l还是指向最初的尾节点,所以next后就可以把一开始的尾节点指向这个newNode去了这样链表就链接起来了。
get()
public E get(int index) {
checkElementIndex(index);
return node(index).item;
}
继续跟到node这个方法去
Node node(int index) {
// assert isElementIndex(index);
if (index < (size >> 1)) {
Node x = first;
for (int i = 0; i < index; i++)
x = x.next;
return x;
} else {
Node x = last;
for (int i = size - 1; i > index; i–)
x = x.prev;
return x;
}
}
这里使用到了折半查找,关键在于
index < (size >> 1)
啥意思呢,>>1表示右移一位,换成二进制来说就是除以2,目的为了找到中间值,如果小于中间值,说明查到的数在中间值的左边,那么就循环遍历从0开始找,如果反过来大于中间值,相当于在中间值的右边,那么就是从size-1,最大位置从小递减去循环查找。
remove()
remove有对象的和index的,关键也是折半查找
public boolean remove(Object o) {
if (o == null) {
for (Node x = first; x != null; x = x.next) {
if (x.item == null) {
unlink(x);
return true;
}
}
} else {
for (Node x = first; x != null; x = x.next) {
if (o.equals(x.item)) {
unlink(x);
return true;
}
}
}
return false;
}
public E remove(int index) {
checkElementIndex(index);
return unlink(node(index));
}
可以看到,index的也是利用node()方法去找到具体的节点,然后去remove删掉,入参为Object的就是用equals去循环判断是否查找到需要删除的元素,如果是就调用unlink()方法去删
再来看看unlink()方法
E unlink(Node x) {
// assert x != null;
final E element = x.item;
final Node next = x.next;
final Node prev = x.prev;
if (prev == null) {
first = next;
} else {
prev.next = next;
x.prev = null;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/c7165eec12657e78daf750de2df639e9.jpeg)
文末
我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份PDF文档
- 第一个要分享给大家的就是算法和数据结构
- 第二个就是数据库的高频知识点与性能优化
- 第三个则是并发编程(72个知识点学习)
- 最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料
还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
[外链图片转存中…(img-ue9ZlgxZ-1713463556521)]
还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!