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

深度解析LinkedList工作原理

引言

在 Java 编程中,集合框架是处理数据存储和操作的强大工具。LinkedList 作为其中的重要成员,为我们提供了一种灵活的列表实现方式。与 ArrayList 基于数组的实现不同,LinkedList 采用链表结构,这使得它在某些操作上具有独特的优势。本文将深入探讨 LinkedList 的原理,包括其底层数据结构、核心属性、构造方法、常用操作的实现细节,以及性能特点和应用场景。

1. LinkedList 概述

1.1 定义与用途

LinkedList 是 Java 集合框架中 List 接口和 Deque 接口的双向链表实现。它允许存储重复元素,并且可以像列表一样按顺序访问元素,同时也支持双端队列的操作,如在头部和尾部进行高效的插入和删除。LinkedList 适用于需要频繁插入和删除元素的场景,尤其是在列表的两端进行操作。

1.2 继承关系与实现接口

LinkedList 继承自 AbstractSequentialList,并实现了 ListDequeCloneablejava.io.Serializable 接口。这意味着它既具有列表的特性,又具备双端队列的功能,同时还支持克隆和序列化。

import java.util.LinkedList;
import java.util.List;
import java.util.Deque;public class LinkedListOverview {public static void main(String[] args) {// 创建一个 LinkedList 对象LinkedList<String> linkedList = new LinkedList<>();// 可以将其赋值给 List 或 Deque 接口类型的变量List<String> list = linkedList;Deque<String> deque = linkedList;}
}

2. 底层数据结构:双向链表

2.1 双向链表的基本概念

双向链表是一种由节点组成的数据结构,每个节点包含三个部分:数据域、指向前一个节点的引用和指向后一个节点的引用。通过这些引用,节点可以相互连接形成一个链状结构。在 LinkedList 中,每个元素都存储在一个节点中,节点之间通过双向引用连接,使得可以从链表的头部或尾部进行遍历。

2.2 LinkedList 中的节点类

LinkedList 中,节点类是一个私有静态内部类,定义如下:

private static class Node<E> {E item;Node<E> next;Node<E> prev;Node(Node<E> prev, E element, Node<E> next) {this.item = element;this.next = next;this.prev = prev;}
}
  • item:存储节点的数据。
  • next:指向下一个节点的引用。
  • prev:指向前一个节点的引用。

3. 核心属性

LinkedList 包含几个核心属性,用于管理链表的状态:

transient int size = 0;
transient Node<E> first;
transient Node<E> last;
  • size:表示链表中元素的数量。
  • first:指向链表的第一个节点。
  • last:指向链表的最后一个节点。

4. 构造方法

4.1 无参构造方法

public LinkedList() {
}

无参构造方法创建一个空的 LinkedList,此时 firstlast 都为 nullsize 为 0。

4.2 带集合参数的构造方法

public LinkedList(Collection<? extends E> c) {this();addAll(c);
}

该构造方法接受一个集合作为参数,将集合中的元素依次添加到 LinkedList 中。

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;public class LinkedListConstructors {public static void main(String[] args) {// 无参构造方法LinkedList<String> list1 = new LinkedList<>();// 带集合参数的构造方法List<String> arrayList = new ArrayList<>();arrayList.add("apple");arrayList.add("banana");LinkedList<String> list2 = new LinkedList<>(arrayList);System.out.println(list2);}
}

5. 常用操作原理

5.1 添加元素

5.1.1 在链表尾部添加元素
public boolean add(E e) {linkLast(e);return true;
}void linkLast(E e) {final Node<E> l = last;final Node<E> newNode = new Node<>(l, e, null);last = newNode;if (l == null)first = newNode;elsel.next = newNode;size++;modCount++;
}
  • add(E e) 方法调用 linkLast(E e) 方法将元素添加到链表的尾部。
  • linkLast(E e) 方法创建一个新节点,将其 prev 引用指向原链表的最后一个节点,然后更新 last 引用为新节点。如果原链表为空,则同时更新 first 引用。
5.1.2 在指定位置插入元素
public void add(int index, E element) {checkPositionIndex(index);if (index == size)linkLast(element);elselinkBefore(element, node(index));
}void linkBefore(E e, Node<E> succ) {// assert succ != null;final Node<E> pred = succ.prev;final Node<E> newNode = new Node<>(pred, e, succ);succ.prev = newNode;if (pred == null)first = newNode;elsepred.next = newNode;size++;modCount++;
}
  • add(int index, E element) 方法首先检查索引的有效性,然后根据索引位置决定是在尾部添加还是在指定节点之前插入。
  • linkBefore(E e, Node<E> succ) 方法创建一个新节点,将其插入到指定节点 succ 之前,并更新相关节点的引用。

5.2 访问元素

public E get(int index) {checkElementIndex(index);return node(index).item;
}Node<E> node(int index) {// assert isElementIndex(index);if (index < (size >> 1)) {Node<E> x = first;for (int i = 0; i < index; i++)x = x.next;return x;} else {Node<E> x = last;for (int i = size - 1; i > index; i--)x = x.prev;return x;}
}
  • get(int index) 方法首先检查索引的有效性,然后调用 node(int index) 方法找到指定位置的节点,并返回该节点的数据。
  • node(int index) 方法根据索引的位置,决定是从链表头部还是尾部开始遍历,以提高查找效率。

5.3 修改元素

public E set(int index, E element) {checkElementIndex(index);Node<E> x = node(index);E oldVal = x.item;x.item = element;return oldVal;
}
  • set(int index, E element) 方法首先检查索引的有效性,然后找到指定位置的节点,将其数据更新为新元素,并返回旧元素。

5.4 删除元素

5.4.1 删除指定位置的元素
public E remove(int index) {checkElementIndex(index);return unlink(node(index));
}E unlink(Node<E> x) {// assert x != null;final E element = x.item;final Node<E> next = x.next;final Node<E> prev = x.prev;if (prev == null) {first = next;} else {prev.next = next;x.prev = null;}if (next == null) {last = prev;} else {next.prev = prev;x.next = null;}x.item = null;size--;modCount++;return element;
}
  • remove(int index) 方法首先检查索引的有效性,然后调用 unlink(Node<E> x) 方法删除指定位置的节点。
  • unlink(Node<E> x) 方法更新相关节点的引用,将被删除节点从链表中移除,并返回被删除节点的数据。
5.4.2 删除指定元素
public boolean remove(Object o) {if (o == null) {for (Node<E> x = first; x != null; x = x.next) {if (x.item == null) {unlink(x);return true;}}} else {for (Node<E> x = first; x != null; x = x.next) {if (o.equals(x.item)) {unlink(x);return true;}}}return false;
}
  • remove(Object o) 方法遍历链表,找到第一个与指定元素相等的节点,然后调用 unlink(Node<E> x) 方法将其删除。如果找到并删除了节点,则返回 true,否则返回 false

6. 性能分析

6.1 时间复杂度

  • 插入和删除操作:在链表的头部或尾部插入和删除元素的时间复杂度为 O(1),因为只需要更新相关节点的引用。在指定位置插入和删除元素的平均时间复杂度为 O(n),因为需要遍历链表找到指定位置。
  • 访问操作:访问指定位置的元素的平均时间复杂度为 O(n),因为需要遍历链表找到指定位置。

6.2 空间复杂度

LinkedList 的空间复杂度为 O(n),主要用于存储节点对象和节点之间的引用。

7. 应用场景

7.1 实现栈和队列

由于 LinkedList 实现了 Deque 接口,它可以很方便地实现栈和队列的功能。

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;public class LinkedListStackQueue {public static void main(String[] args) {// 实现栈Stack<String> stack = new LinkedList<>();stack.push("apple");stack.push("banana");System.out.println(stack.pop());// 实现队列Queue<String> queue = new LinkedList<>();queue.offer("cherry");queue.offer("date");System.out.println(queue.poll());}
}

7.2 需要频繁插入和删除元素的场景

当需要频繁在列表的两端或中间插入和删除元素时,LinkedListArrayList 更具优势。

8. 总结

LinkedList 作为 Java 集合框架中的重要成员,基于双向链表实现,具有灵活的插入和删除操作能力。它适用于需要频繁在列表两端进行操作以及需要实现栈和队列功能的场景。然而,由于其访问元素的时间复杂度较高,在需要频繁随机访问元素的场景下,ArrayList 可能是更好的选择。通过深入理解 LinkedList 的原理和性能特点,我们可以在实际开发中更加合理地选择和使用数据结构。

相关文章:

深度解析LinkedList工作原理

引言 在 Java 编程中&#xff0c;集合框架是处理数据存储和操作的强大工具。LinkedList 作为其中的重要成员&#xff0c;为我们提供了一种灵活的列表实现方式。与 ArrayList 基于数组的实现不同&#xff0c;LinkedList 采用链表结构&#xff0c;这使得它在某些操作上具有独特的…...

excel的逻辑类型函数(主要包括if、and、or、not、xor、iserror、iferror、true、false、ifs、ifna、switch)

目录 1. IF 函数2. AND 函数3. OR 函数4. NOT 函数5. XOR 函数6. ISERROR 函数7. IFERROR 函数8. TRUE 与 FALSE9. IFS 函数10. IFNA 函数11. SWITCH 函数 1. IF 函数 功能&#xff1a; 根据指定条件判断结果&#xff0c;如果条件为 TRUE&#xff0c;则返回一个值&#xff1b;…...

数据驱动金融韧性升级,开启数据交换“新范式”:构建“实时、国产化强适配”的数据交换与共享平台

在金融行业&#xff0c;数据不只是“资产”&#xff0c;更是贯穿风控、合规、营销与运营的核心“生命线”。而在数字化加速与信创战略并行推进的当下&#xff0c;金融行业对于“实时数据流通”的需求从未如此迫切。 面对业务复杂性提升、国产化替代加速&#xff0c;以及监管科…...

cpp自学 day20(文件操作)

基本概念 程序运行时产生的数据都属于临时数据&#xff0c;程序一旦运行结束都会被释放 通过文件可以将数据持久化 C中对文件操作需要包含头文件 <fstream> 文件类型分为两种&#xff1a; 文本文件 - 文件以文本的ASCII码形式存储在计算机中二进制文件 - 文件以文本的…...

Qt饼状图在图例上追踪鼠标落点

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、饼状图的关键接口二、关键代码1.鼠标移动事件2.核心判断逻辑 总结 前言 最近做了一个项目&#xff0c;需要当鼠标在饼状图上移动的时候展示Slice的内容&am…...

ZKmall开源商城服务端验证:Jakarta Validation 详解

ZKmall开源商城基于Spring Boot 3构建&#xff0c;其服务端数据验证采用Jakarta Validation API​&#xff08;原JSR 380规范&#xff09;&#xff0c;通过声明式注解与自定义扩展机制实现高效、灵活的数据校验体系。以下从技术实现、核心能力、场景优化三个维度展开解析&#…...

操作系统概述(3)

批处理系统 1.单道批处理系统 单道批处理系统是成批地处理作用&#xff0c;并且始终只有一道作业在内存中的系统。优点&#xff1a;提高系统资源的利用率和系统吞吐量。缺点&#xff1a;系统中的资源得不到充分利用。 2.多道批处理系统 引入多道程序设计技术&#xff0c;是…...

深入理解 Object.entries():基础用法与 Object.keys() 的核心区别

深入理解 Object.entries()&#xff1a;基础用法与 Object.keys() 的核心区别 一、Object.entries() 是什么&#xff1f; Object.entries() 是 JavaScript 中的一个内置方法&#xff0c;用于将对象的 ‌可枚举属性‌&#xff08;自身的、非继承的&#xff09;转换为一个数组。…...

GitHub 趋势日报 (2025年04月06日)

GitHub 趋势日报 (2025年04月06日) 本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星语言1microsoft/markitdownPython tool for converting files and office documents to Markdown.⭐ 548Py…...

Visual Studio 中使用 Clang 作为 C/C++ 编译器时,设置优化选项方法

在 Visual Studio 中使用 Clang 作为 C/C 编译器时&#xff0c;可以通过以下方法设置优化选项&#xff1a; 方法 1&#xff1a;通过项目属性设置&#xff08;推荐&#xff09; 右键项目 → 属性 配置属性 → C/C → 优化 优化&#xff1a;选择优化级别 /O0 - 禁用优化&#x…...

现场测试的特点与测试设备的基本要求

在各类测试场景中&#xff0c;现场测试有着不可替代的作用。不过&#xff0c;它也面临着诸多难题&#xff0c;对测试设备也有着特殊要求。今天&#xff0c;咱们就深入探讨一下现场测试的特点与测试设备的基本要求。 现场测试的特点 场地电磁环境噪声问题 建议环境噪声低于…...

构建一个最简单的UDP服务器和客户端并逐行解析

目录 1.服务器 &#xff08;1&#xff09;基本概念 &#xff08;2&#xff09;代码实现 3.逐行解析 1&#xff09; 2&#xff09; 3&#xff09; 4&#xff09; 5&#xff09; 6&#xff09; 7&#xff09; 8&#xff09; 1. response.getBytes(): 2.response.get…...

LeetCode 1638 统计只差一个字符的子串

标题&#xff1a;LeetCode 算法题 - 统计只差一个字符的子串数目 在算法学习的过程中&#xff0c;我们经常会遇到一些有趣的字符串问题。今天就来探讨一道这样的题目&#xff1a;给定两个字符串 s 和 t &#xff0c;找出 s 中的非空子串的数目&#xff0c;这些子串满足替换一个…...

DAY 39 leetcode 18--哈希表.四数之和

题号18 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff1a; 和…...

关于lombok的异常快速解决办法

前言&#xff1a; 通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往…...

Android SELinux权限使用

Android SELinux权限使用 一、SELinux开关 adb在线修改seLinux(也可以改配置文件彻底关闭) $ getenforce; //获取当前seLinux状态,Enforcing(表示已打开),Permissive(表示已关闭) $ setenforce 1; //打开seLinux $ setenforce 0; //关闭seLinux二、命令查看sel…...

JavaWeb注解的原理

WebServlet("/mayikt") 是 Java Servlet 3.0 及以上版本中引入的注解&#xff0c;用于简化 Servlet 的配置。其原理和与 Servlet 映射关系的知识点如下&#xff1a; 1. 注解的作用与原理 核心功能&#xff1a; WebServlet 注解的作用是将当前类声明为一个 Servlet&am…...

类和对象—多态

目录 1、多态的概念2、多态的条件3、向上转型3.1 概念3.2 使用场景 4、向下转型5、多态的优缺点 1、多态的概念 多态&#xff0c;通俗来讲就是多种形态&#xff0c;即对于同样的行为&#xff0c;不同的对象去完成会产生不同的状态。比如动物都会吃东西&#xff0c;小狗和小猫都…...

vscode启动vite+Vue3项目调试功能,QQ浏览器为例

1、增加launch.json配置 {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请访问: https://go.microsoft.com/fwlink/?linkid830387"version": "0.2.0","configurations": [{"type&quo…...

Spring MVC 的执行流程以及运行原理

一&#xff0e;什么是 MVC&#xff1f; MVC 是 Model 、 View 和 Controller 的缩写&#xff0c;分别代表 Web 应用程序中的 3 种职责&#xff0c; MVC 是一种软件设计规范。它将业务逻辑、数据、显示分离的方法来组织代码&#xff0c;降低了视图与业 务逻辑之间的…...

08-Spring MVC 请求处理流程全解析

Spring MVC 请求处理流程全解析&#xff08;从 DispatcherServlet 到 Controller&#xff09; Spring MVC 是构建 Web 应用的基础框架&#xff0c;而其中最核心的组件就是 DispatcherServlet&#xff0c;它作为整个请求流程的入口和协调者&#xff0c;掌控了从接收请求、分发到…...

pikachu靶场搭建教程,csfr实操

靶场安装 靶场下载地址 百度网盘下载地址和密码 百度网盘 请输入提取码 0278 github靶场下载地址 https://gitcode.com/Resource-Bundle-Collection/c7cc1 安装前提 这两个文件夹的配置文件都要进行更改修改数据库密码 D:\phpstudy_pro\WWW\pikachu\inc D:\phpstudy_pro…...

MCP + 数据库,一种比 RAG 检索效果更好的新方式!

大家好&#xff0c;欢迎来到 code秘密花园&#xff0c;我是 ConardLi。 在今天这一期&#xff0c;我们将一起学习一种基于 MCP 提高大模型检索外部知识精度的新思路&#xff0c;实测比 RAG 效果要好很多。 目前市面上讲 MCP 的教程比较多&#xff0c;但大多数都是一些概念性的…...

图像处理中的梯度计算、边缘检测与凸包特征分析技术详解

前言 书接上文 OpenCV图像处理实战全解析&#xff1a;镜像、缩放、矫正、水印与降噪技术详解-CSDN博客文章浏览阅读1.1k次&#xff0c;点赞38次&#xff0c;收藏29次。本文系统解析OpenCV图像处理五大实战场景&#xff1a;镜像反转的三种坐标变换模式&#xff0c;图像缩放的尺…...

TDengine 与 taosAdapter 的结合(一)

一、引言 在当今数字化时代&#xff0c;数据量呈爆发式增长&#xff0c;尤其是物联网、工业互联网等领域产生的海量时序数据&#xff0c;对数据存储和处理提出了极高要求。TDengine 作为一款高性能、开源的时序数据库&#xff0c;专为这些场景设计并优化&#xff0c;在时序数据…...

23种设计模式-行为型模式-模板方法

文章目录 简介场景解决代码关键优化点 总结 简介 模板方法是一种行为设计模式&#xff0c;它在超类中定义了一个算法的框架&#xff0c;允许子类在不修改结构的情况下重写算法的特定步骤。 场景 假如你正在开发一款分析文档的数据挖掘程序。用户需要向程序输入各种格式&…...

Django异步执行任务django-background-tasks

1、安装 pip install django-background-tasks 2、注册服务 INSTALLED_APPS [...background_task, ]3、生成表 // 生成迁移 python manage.py makemigrations //运行迁移 python manage.py migrate 4、创建文件&#xff0c;模拟任务 from background_task import backgrou…...

从零设计React-Markdown组件的实现方案

从零设计React-Markdown组件的实现方案 现在,把这些步骤整理成代码结构。首先是解析器类,用正则表达式分割文本为Token,然后生成AST。接着,编写一个React组件,接收Markdown字符串,解析成AST,遍历AST生成对应的React元素。处理代码高亮需要引入第三方库,但用户不允许用现…...

如何在React中集成 PDF.js?构建支持打印下载的PDF阅读器详解

本文深入解析基于 React 和 PDF.js 构建 PDF 查看器的实现方案&#xff0c;该组件支持 PDF 渲染、图片打印和下载功能&#xff0c;并包含完整的加载状态与错误处理机制。 完整代码在最后 一个PDF 文件&#xff1a; https://mozilla.github.io/pdf.js/web/compressed.tracemo…...

React-Markdown 组件底层实现原理详解

如何在 React 中渲染 Markdown 文档 React-Markdown 组件底层实现原理详解 一、核心架构&#xff1a;基于 Unified.js 的编译流水线 React-Markdown 的底层实现依赖于 Unified.js 这一开源内容处理系统&#xff0c;其核心是一个可插拔的编译流水线。整个过程分为四个阶段&…...

基于单片机的防火防盗报警系统设计(论文+源码)

2.1系统的功能及方案设计 本次课题为基于单片机的防火防盗报警系统&#xff0c;其系统采用STC89C52单片机为控制器&#xff0c;并结合SIM800短信模块&#xff0c;DS18B20温度检测模块&#xff0c;MQ-2烟雾检测模块&#xff0c;红外人体检测模块&#xff0c;按键模块&#xff0c…...

NO.72十六届蓝桥杯备战|搜索算法-DFS|选数|飞机降落|八皇后|数独(C++)

P1036 [NOIP 2002 普及组] 选数 - 洛谷 组合型枚举&#xff0c;路径⾥⾯记录选择数的「总和」。在选出k 个数之后&#xff0c;判断「是否是质数」 #include <bits/stdc.h> using namespace std;const int N 25; int n, k; int a[N];int ret; int path; //记录路径中所…...

网络Socket编程基于UDP协议模拟简易网络通信

一、预备知识 网络编程&#xff08;Network Programming&#xff09;是指编写程序来实现计算机网络之间的通信。这通常涉及到使用套接字&#xff08;sockets&#xff09;来建立连接、发送和接收数据。 &#xff08;一&#xff09;套接字 套接字&#xff08;Socket&#xff0…...

rust 使用select退出线程

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] pub struct Capture {clear: bool, // ????????interface: String, // ??times: u64, // ?? }pub async fn cmd_capture(State(web_env): State<ArcWebEnv>,Json(args): Json<C…...

C++学习day7

思维导图&#xff1a; 使用vector实现一个简单的本地注册登录系统 注册&#xff1a;将账号密码存入vector里面&#xff0c;注意防重复判断 登录&#xff1a;判断登录的账号密码是否正确 #include <iostream> #include <cstring> #include <cstdlib> #includ…...

【学习笔记】CoACD: 基于碰撞感知凹性与树搜索的近似凸分解

CoACD 基于碰撞感知凹性与树搜索的近似凸分解 CoACD 官方文档 CoACD&#xff08;Convex Approximation of Complex Decompositions&#xff09;是一种用于将复杂网格分解为多个凸包的算法, 专为 3D 网格设计了近似凸分解算法&#xff0c;强调在保持物体间潜在碰撞条件的同时减…...

Three.js 系列专题 6:后处理与特效

内容概述 后处理(Post-Processing)是在渲染完成后对画面进行额外的处理,以实现模糊、辉光、颜色校正等效果。Three.js 通过 EffectComposer 提供后处理支持。本专题还将简要介绍着色器和粒子系统,为更复杂的特效打基础。 学习目标 掌握 EffectComposer 的基本使用。实现辉…...

2025 年江苏保安员职业资格考试经验分享​

江苏保安行业发展成熟&#xff0c;2025 年考试注重对考生综合素养的考查。报考条件常规&#xff0c;但对诚信记录有额外关注&#xff0c;如有不良信用记录可能影响报考资格。​ 报名在江苏省各地级市公安局指定点进行&#xff0c;提交资料包括身份证、学历证、个人诚信报告&am…...

​​亚马逊算法重构消费市场:解码2024年Q1北美站热搜商品的底层逻辑​

在跨境电商迈入精细化运营时代的背景下&#xff0c;亚马逊平台最新发布的《2024年Q1零售搜索趋势报告》揭示了算法驱动下的消费新图景。数据显示&#xff0c;北美站点月均超300万人次重复搜索特定品类商品&#xff0c;健康生活、智能家居等五大领域形成持续增长极。这份由亚马逊…...

powershell绑定按钮事件的两种方式

写一个powershell的简单GUI做本地任务&#xff0c;试验出2个方法&#xff1a; 方法1&#xff1a; function btn1_click {write-host $text1.Text -ForegroundColor Green -BackgroundColor Black }$btn1.Add_Click({btn1_click})方法2&#xff1a; $btn2_click {write-host $…...

LearnOpenGL——OIT

教程地址&#xff1a;简介 - LearnOpenGL CN 简介 原文链接&#xff1a;LearnOpenGL - Introduction 前言 在混合&#xff08;Blending&#xff09;章节中&#xff0c;我们介绍了颜色混合的主题。混合是在3D场景中实现透明表面的方法。简而言之&#xff0c;透明度涉及到在计算…...

【蓝桥杯】Python大学A组第十五届省赛

1.填空题 1.1.拼正方形 问题描述 小蓝正在玩拼图游戏,他有个的方块和个的方块,他需要从中挑出一些来拼出一个正方形。 比如用个和个的方块可以拼出一个的正方形;用个的方块可以拼出一个的正方形。 请问小蓝能拼成的最大的正方形的边长为多少。 import math # 2*2的个数 a =…...

使用JS+HTML+CSS编写提词器实例

手搓提词器网页版&#xff0c;有些BUG但是基本功能使用没有问题&#xff0c;有需要的可复制粘贴&#xff0c;BUG自行修复。下面直接进入代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><me…...

人工智能基础知识详解:从概念到前沿技术与应用

在数字化浪潮席卷全球的今天&#xff0c;人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;已不再是科技前沿的神秘概念&#xff0c;而是融入我们日常工作的实用工具。从智能语音助手到自动驾驶汽车&#xff0c;从医疗影像诊断到生成式艺术创作&…...

重温经典,畅享怀旧游戏盛宴

FC街机是一款专为安卓设备设计的经典游戏合集应用&#xff0c;它将玩家熟悉的红白机&#xff08;FC&#xff09;游戏体验带到了移动设备上。这款应用不仅提供了丰富的游戏选择&#xff0c;还通过优化的界面和操作&#xff0c;让玩家能够随时随地享受经典游戏的乐趣。 游戏非常…...

CPU 压力测试命令大全

CPU 压力测试命令大全 以下是 Linux/Unix 系统下常用的 CPU 压力测试命令和工具&#xff0c;可用于测试 CPU 性能、稳定性和散热能力。 1. 基本压力测试命令 1.1 使用 yes 命令 yes > /dev/null & # 启动一个无限循环进程 yes > /dev/null & # 启动第二个进…...

Windows 系统下用 VMware 安装 CentOS 7 虚拟机超详细教程(包含VMware和镜像安装包)

前言 资源 一、准备工作 &#xff08;一&#xff09;下载 VMware Workstation &#xff08;二&#xff09;下载 CentOS 7 镜像 二、安装 VMware Workstation&#xff08;比较简单&#xff0c;按下面走即可&#xff09; 三、创建 CentOS 7 虚拟机 四、安装 CentOS 7 系统…...

QLineEdit的提交前验证

QLineEdit是pyqt中常用的输入控件&#xff0c;默认情况下&#xff0c;它可以接受键盘输入的任何可打印字符。有时候&#xff0c;我们需要在用户提交前对其输入的内容先行验证&#xff0c;当用户输入不符合预期时予以清空&#xff0c;这就需要对QLineEdit控件进行以下操作&#…...

【Linux高级IO(二)】初识epoll

目录 1、epoll的接口 2、epoll原理 3、epoll工作方式 1、epoll的接口 #include <sys/epoll.h> 1、int epoll_create(int size) &#xff1a;创建epoll模型 返回值是一个文件描述符&#xff0c;创建一个struct file结构体&#xff0c;指向epoll模型&#xff0c;返回的…...

2018年真题

数学基础 一、 &#xff08;共4分&#xff09;用逻辑符号表达下列语句&#xff08;论域为包含一切事物的集合&#xff09; 1、&#xff08;2分&#xff09;集合A的任一元素的元素都是A的元素 经过对图片文字的识别与逻辑分析&#xff0c;结果如下&#xff1a; 符号定义&…...