当前位置: 首页 > article >正文

【数据结构与算法】Java描述:第二节:LinkedList 链表

一、链表的概念与结构

1.1 概念:

通俗的来说,链表是由一个个结点连接起来的就叫链表

1.2 结构:

链表存储的数据 在 物理上是不一定连续的,它是由前面链接后面,一个个连起来的。

二、Java底层的 LinkedList 

2.1 Java底层构成:

LinkedList 的底层是 双向链表结构, 由于链表没有将元素存储在连续的空间中,元素存储在单独的j结点中,然后通过引用将 结点 连接起来了。

因此在在任意位置 插入 或者 删除 元素时,不需要搬移元素,效率比较高

LinkedList 中包含 LinkNode 类

从上图我们可以看到 每个结点都有三部分构成,

分别是数据  (elem),结点的前驱 (prev),结点的后继(next)

2.2 链表的构造方法:

和顺序表类似,可以传入另一个链表 作为参数来创建新的链表

三、链表相关方法

3.1 链表中的方法:

3.2 链表的遍历

public static void main(String[] args) {
        LinkedList<Integer> linkedList2 = new LinkedList<>();
        linkedList2.add(1);//默认都是尾插
        linkedList2.addLast(3);
        linkedList2.addLast(4);
        linkedList2.addLast(5);
        System.out.println(linkedList2);
        
        //迭代器反向遍历
        System.out.println("===== ListIterator ====");
        ListIterator<Integer> lit2 =  linkedList2.listIterator(linkedList2.size());
        while (lit2.hasPrevious()) {
            System.out.print(lit2.previous()+" ");
        }
        System.out.println();

        //迭代器正向遍历,属于子类
        System.out.println("===== ListIterator ====");
        ListIterator<Integer> lit =  linkedList2.listIterator();
        while (lit.hasNext()) {
            System.out.print(lit.next()+" ");
        }
        System.out.println();
        
        //迭代器正向遍历
        System.out.println("===== Iterator ====");
        Iterator<Integer> it = linkedList2.iterator();
        while (it.hasNext()) {
            System.out.print(it.next()+" ");
        }
        System.out.println();

        //for each遍历
        System.out.println("=====for each====");

        for(Integer x : linkedList2) {
            System.out.print(x +" ");
        }
        System.out.println();
        
        //for循环遍历
        System.out.println("=====for====");
        for (int i = 0; i < linkedList2.size(); i++) {
            System.out.print(linkedList2.get(i) +" ");
        }
        System.out.println();


    }

四、顺序表与链表的对比

顺序表 与 链表 的区别主要体现在 查询 与 插入删除 的时间效率上,因此它们两个的使用场景不一样。


http://www.kler.cn/a/579539.html

相关文章:

  • 【YOLOv12改进trick】三重注意力TripletAttention引入YOLOv12中,实现遮挡目标检测涨点,含创新点Python代码,方便发论文
  • OSPF报文分析
  • MySQL环境搭建和基本操作
  • 【大模型】WPS 接入 DeepSeek-R1详解,打造全能AI办公助手
  • vivado 充分利用 IP 核
  • 实时数据驱动的RAG应用
  • Python如何制作并查询sql数据库
  • 【初阶数据结构】二叉树的链式结构
  • 面试基础--Redis 缓存穿透、缓存击穿、缓存雪崩深度解析
  • LLM论文笔记 17: Program of Thoughts Prompting (PoT)
  • 在 Ubuntu 20.04 上交叉编译 Qt 5 应用,使其可在 Windows 运行
  • Elasticsearch如何删除字段
  • Linux系统基于ARM平台的LVGL移植
  • clickhouse 频繁刷新
  • 算法与数据结构(最长回文子串)
  • PTA L2一些题目
  • 学习网络安全需要哪些基础?
  • ubuntu直接安装mobaxterm
  • 大模型最新面试题系列:训练篇之模型监控与调试
  • CarPlanner:用于自动驾驶大规模强化学习的一致性自回归轨迹规划