LinkedList(Java8,Java多线程面试题总结

问题:LinkedList 是怎么进行查找的?

LinkedList 相比于 ArrayList 的优势在于插入和删除,劣势是查找,LinkedList 类使用双向链表一定程度上确实可以提高查找效率。

LinedList 中的查询分为两种,一种是根据 index 查询 node(包含元素值),也即是 node() 方法,另一种是根据 object(元素值) 查询 index,也即是 indexOf() 方法。链表不像数组那样,可以根据 index 直接查询出元素的值,因为两者在内存种的结构是不一样的,数组存储在连续的内存空间,而链表存储不需要连续的内存空间。

链表中的 index 只是标记元素的相对于链表头部(first 指向的)node 的个数,这样在根据 index 查询时,可以根据 index 和 size 的关系,提高查询性能。当 index 大致在链表的前半部分时(index < (size >> 1)),从链表的首部开始遍历显然更快,而当 index 大致在链表的后半部分时(index > (size >> 1)),从链表的尾部开始遍历显然更快,这样就使得查找次数从 n 次将为了 n/2 次,虽然查找算法的时间复杂度还是 O(n)。

根据元素值来查找 node 的 index,使用的是 indexOf() 方法和 lastIndexOf() 方法,前一个方法是从前往后查找,后一个方法是从后往前查找。

问题:LinkedList 内部一些方法的区别?

LinkedList 内部有很多功能相同的方法,方法内部大多都是调用 link 相关的方法。

| LinkedList | 添加元素 | 删除元素 | 查看元素 |

| --- | --- | --- | --- |

| 作为链表 | add()、set() | unlink()、remove() | get() |

| 作为队列 | offer() | poll() | peek() |

| 作为栈 | push() | pop() | 无 |

问题:LinkedList 和 ArrayList 的区别

如何快速更新自己的技术积累?

  • 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
  • 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
  • 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
  • 学习以后不知道有没有学成,则可以通过面试去检验。

我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目

CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

LinkedList(Java8,Java多线程面试题总结

LinkedList(Java8,Java多线程面试题总结

LinkedList(Java8,Java多线程面试题总结

上一篇:JUC基础(17):集合的线程安全


下一篇:大爽Python入门教程 3-3 循环:`for`、`while`