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

Java复习Day22

链表复习(1):

  1. 链表基础 链表是一种物理存储非连续、非顺序的数据结构,通过指针链接实现元素的逻辑顺序。它由动态生成的结点组成,每个结点包含数据域和指针域。

常见链表类型:

  • 单向链表:结点含数据域和指向后继的指针域
  • 双向链表:结点含数据域、前驱指针和后继指针
  • 循环链表:首尾相连的链表形式

优势:

  • 动态内存管理,无需预先确定数据规模
  • 插入操作时间复杂度O(1)
  • 内存利用率高

劣势:

  • 查找效率低(需顺序遍历)
  • 额外存储指针域,空间开销较大
  1. 链表实现
public class MyLinkedList<E> {private class Node<E> {Node<E> next;E data;Node<E> previous;public Node(Node<E> next, E data, Node<E> previous) {this.next = next;this.data = data;this.previous = previous;}}private Node<E> first;private Node<E> last;private int size;// 构造方法public MyLinkedList() {}public MyLinkedList(Node<E> first, Node<E> last, int size) {this.first = first;this.last = last;this.size = size;}// 核心方法public boolean add(E e) {Node<E> l = last;Node<E> newNode = new Node<>(null, e, l);last = newNode;if (l == null) {first = newNode;} else {l.next = newNode;}size++;return true;}public void add(int index, E e) {if (index == 0) {first = new Node<>(first, e, null);} else {Node<E> prev = node(index-1);Node<E> next = prev.next;Node<E> newNode = new Node<>(next, e, prev);prev.next = newNode;}size++;}private Node<E> node(int index) {Node<E> x = first;for (int i = 0; i < index; i++) {x = x.next;}return x;}public E get(int index) {return node(index).data;}public int size() {return size;}public E getFirst() {if (first == null)throw new NoSuchElementException();return first.data;}public E getLast() {if (last == null)throw new NoSuchElementException();return last.data;}public E remove(int index) {Node<E> node = first;if (index == 0) {first = node.next;} else {Node<E> prev = node(index-1);node = prev.next;prev.next = node.next;}size--;return node.data;}
}

  1. LinkedList特性 基于链表数据结构实现,提供以下特有方法:
  • addFirst()/addLast():在首/尾添加元素
  • getFirst()/getLast():获取首/尾元素
  • removeFirst()/removeLast():移除首/尾元素
  1. 集合比较 ArrayList vs LinkedList:
  • 存储结构:
    • ArrayList:数组结构,顺序存储
    • LinkedList:链表结构,非连续存储
  • 操作性能:
    • ArrayList:随机访问高效
    • LinkedList:插入删除高效
  1. Vector特性 与ArrayList的异同:
  2. 初始容量:
    • ArrayList:初始为0,首次添加时扩容
    • Vector:初始为10
  3. 扩容机制:
    • ArrayList:扩容1.5倍
    • Vector:按给定增量扩容,默认2倍
  4. 线程安全:
    • ArrayList:非线程安全
    • Vector:线程安全
http://www.xdnf.cn/news/9907.html

相关文章:

  • 前端使用qrcode来生成二维码的时候中间添加logo图标
  • Orcad 修复Pin Name重复问题
  • React 第五十节 Router 中useNavigationType的使用详细介绍
  • 【题解-洛谷】B4278 [蓝桥杯青少年组国赛 2023] 简单算术题
  • 飞牛NAS+Docker技术搭建个人博客站:公网远程部署实战指南
  • 【HTML-15】HTML表单:构建交互式网页的基石
  • 零基础开始的网工之路第十六天------Linux日志管理
  • VueScan Pro v9.8.45.08 一款图像扫描软件,中文绿色便携版
  • JSON Schema
  • javaweb 前言
  • ArcPy错误处理与调试技巧
  • 抖音、快手无水印福音开源下载器之蓝猫 BlueCatKoKo
  • MMdetection推理保存图片和预测标签脚本
  • 前端的面试笔记——Vue2/3(一)Vue2和Vue3的区别和优缺点
  • 【ROS2】创建单独的launch包
  • 进程同步机制-信号量机制-AND型信号量
  • 特别篇-产品经理(三)
  • 数学概念解释数据集(200条)收集分享,为AI智能体应用助力~
  • 【Dv3Admin】工具CRUD混合器文件解析
  • 【SQL Server Management Studio 连接时遇到的一个错误】
  • 纵览网丨病毒学领域的 AI 变局:机遇、隐忧与监管之路
  • 5.28 孔老师 nlp讲座
  • 罗德里格斯公式动图演示
  • [ Qt ] | QPushButton常见用法
  • Allegro 版本查看和降版本
  • DeepSeek:不同模式(v3、R1)如何选择?
  • 三层架构 vs SOA vs 微服务:该选谁?
  • 华为云Flexus+DeepSeek征文 | 初探华为云ModelArts Studio:部署DeepSeek-V3/R1商用服务的详细步骤
  • 大型工业控制系统中私有云计算模式的弊端剖析与反思
  • 数据结构 - 数相关计算题