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. 快慢指针?约瑟夫?三步为你讲解链表精选算法题!

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

相关推荐
陈文锦丫1 小时前
MQ的学习
java·开发语言
乌暮1 小时前
JavaEE初阶---线程安全问题
java·java-ee
爱笑的眼睛111 小时前
GraphQL:从数据查询到应用架构的范式演进
java·人工智能·python·ai
不穿格子的程序员1 小时前
从零开始写算法——链表篇4:删除链表的倒数第 N 个结点 + 两两交换链表中的节点
数据结构·算法·链表
liwulin05062 小时前
【PYTHON-YOLOV8N】如何自定义数据集
开发语言·python·yolo
dragoooon342 小时前
[hot100 NO.19~24]
数据结构·算法
Seven972 小时前
剑指offer-52、正则表达式匹配
java
代码or搬砖2 小时前
RBAC(权限认证)小例子
java·数据库·spring boot
青蛙大侠公主2 小时前
Thread及其相关类
java·开发语言
爱吃大芒果2 小时前
Flutter 主题与深色模式:全局样式统一与动态切换
开发语言·javascript·flutter·ecmascript·gitcode