Java数据结构初阶——LinkedList

接下来博主会持续更新JavaSE、Java数据结构、MySQL、JavaEE、微服务、Redis等等内容的知识点整理。后续我也会精心制作算法解析、项目经验系列内容,内容绝对干货。相信这些文章能够成为我和大家的"葵花宝典",喜欢的话就关注一下吧!敬请期待!

文章目录

我们知道当在ArrayList任意位置插入或者删除元素时,就需要将后续元素整体往前或者往后搬移,时间复杂度为O(n),效率比较低,因此ArrayList不适合做任意位置插入和删除比较多的场景。在此种场景下,使用LinkedList较好。

LinkedList的使用

LinkedList的底层是双向链表,具体是不带头、非循环的双向链表。

【说明】

  1. LinkedList与ArrayList一样也实现了List接口
  2. LinkedList没有实现RandomAccess接
    口,因此LinkedList不支持随机访问
  3. LinkedList的任意位置插入和删除元素时
    效率比较高,时间复杂度为O(1),所以 LinkedList比较适合任意位置插入、删除的场景

LinkedList的构造

java 复制代码
public static void main(String[] args) {
// 构造一个空的LinkedList
List<Integer> list1 = new LinkedList<>();
//对于第二个方法的使用:
List<String> list2 = new ArrayList
<>();//先构造一个ArrayList
list2. add("ab");
list2. add("cd");
list2. add("ef");
// 此时可以使用ArrayList对象来构造LinkedList,也就是第二个方法的使用
List<String> list3 = new LinkedList<>(list2);
}

LinkedList的常用方法介绍


注意:

  1. 可以看到LinkedList也有get(int index)方法,但是与ArrayList不一样,LinkedList仍不支持随机访问。get()方法底层还是通过遍历链表找到index下标,然后返回val,所以时间复杂度仍是O(n)。
  2. LinkedList中的subList与ArrayList一样,不是拷贝数据给到新链表,而是新链表共用了原链表的对应的一块空间。更改新链表会影响到原链表。

LinkedList的遍历

我们熟知可以使用for循环或者for-each来遍历链表,那我们也可以使用迭代器来实现对链表的遍历

java 复制代码
// 使用迭代器遍历---正向遍历
ListIterator<Integer> it1 = list.listIterator(); // 获取一个起始位置在列表开头的列表迭代器
while(it1.hasNext()){ // 判断游标后面是否还有元素
System.out.print(it1.next() + " "); // 返回游标后的下一个元素,并将游标后移
}
System.out.println();
java 复制代码
// 使用反向迭代器---反向遍历
ListIterator<Integer> it2 = list.listIterator(list.size()); // 获取一个起始位置在列表末尾的列表迭代器
while (it2.hasPrevious()){ // 判断游标前面是否还有元素
System.out.print(it2.previous() + " ");
}//先将游标向前移动一位,然后返回该游标位置后面的元素 。
//循环会从列表末尾开始,向前遍历至列表开头。
System.out.println();

ListIterator与Iterator区别

ArrayList和LinkedList的区别

链表相关面试题~

下面两篇文章中部分为链表算法面试题,文章中博主分 1. 解题思路 2. 代码实现及解析 3. 总结 三部分整理了算法的解析,有兴趣的可以练习下找找手感

  1. Java算法题解析(3)

  2. 快慢指针?约瑟夫?三步为你讲解链表精选算法题!

觉得文章对你有帮助的话就点个赞,收藏起来这份免费的资料吧!也欢迎大家在评论区讨论技术、经验

相关推荐
~无忧花开~3 小时前
JavaScript实现PDF本地预览技巧
开发语言·前端·javascript
4***99743 小时前
Kotlin序列处理
android·开发语言·kotlin
froginwe113 小时前
Scala 提取器(Extractor)
开发语言
t***D2643 小时前
Kotlin在服务端开发中的生态建设
android·开发语言·kotlin
qq_12498707533 小时前
基于springboot的建筑业数据管理系统的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·毕业设计
一 乐3 小时前
宠物管理|宠物共享|基于Java+vue的宠物共享管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·springboot·宠物
a crazy day3 小时前
Spring相关知识点【详细版】
java·spring·rpc
Elias不吃糖3 小时前
LeetCode每日一练(209, 167)
数据结构·c++·算法·leetcode