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

数据结构-ArrayList

文章目录

  • 1. 线性表
  • 2. 顺序表
  • 3. ArrayList
  • 4. ArrayList的问题以及思考
    • 4.2 增容的性能消耗问题
    • 4.3 空间浪费问题

1. 线性表

线性表(Linear List)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见线性表:顺序表、链表、栈、队列…

线性表在逻辑上是线性结构,也就是连续的一条直线。但是在物理上不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。

2. 顺序表

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。

顺序表的实现

package myDataStructure.ArrayList;/*** @Author: Author* @CreateTime: 2025-03-18* @Description:*/
public interface SeqList<T> {// 新增元素,默认在数组最后新增void add(T data);// 在 pos 位置新增元素void add(int pos, T data);// 判定是否包含某个元素boolean contains(T toFind);// 查找某个元素对应的位置int indexOf(T toFind);// 获取 pos 位置的元素T get(int pos);// 给 pos 位置的元素设为 valuevoid set(int pos, T value);// 删除第一次出现的关键字keyvoid remove(T toRemove);// 获取顺序表长度int size();// 清空顺序表void clear();
}
package myDataStructure.ArrayList;import java.util.Arrays;/*** @Author: Author* @CreateTime: 2025-03-18* @Description: 支持泛型的动态数组的实现*/
public class MyArrayList<T> implements SeqList<T>{private Object[] array; // 内部使用 Object[] 存储数据,因为 Java 的泛型会在运行时擦除类型信息。private int size;public MyArrayList(){array=new Object[10];}// 动态扩容private void checkCapacity(){if (array.length==size){array=Arrays.copyOf(array,size*2);}}// 添加操作的边界检查private void rangeCheckForAdd(int index) {if (index<0||index>size){throw new IndexOutOfBoundsException("index超出范围");}}// 读取修改操作的边界检查private void rangeCheckForGetAndSet(int index) {if (index < 0 || index >= size) {throw new IndexOutOfBoundsException("index超出范围");}}@Overridepublic void add(T data) {checkCapacity();array[size]=data;size++;}@Overridepublic void add(int pos, T data) {checkCapacity();rangeCheckForAdd(pos);for(int i=size;i>pos;i--){array[i]=array[i-1];}array[pos]=data;size++;}@Overridepublic boolean contains(T toFind) {if (toFind==null){// 如果 toFind 是null,直接调用 array[i].equals(toFind) 会导致 NullPointerExceptionfor (int i = 0; i < size; i++) {if (array[i] == null) {return true;}}}else {for (int i=0;i<size;i++){if (array[i].equals(toFind)){return true;}}}return false;}@Overridepublic int indexOf(T toFind) {if (toFind == null) {for (int i = 0; i < size; i++) {if (array[i] == null) {return i;}}} else {for (int i = 0; i < size; i++) {if (toFind.equals(array[i])) {return i;}}}return -1;}@Overridepublic T get(int pos) {rangeCheckForGetAndSet(pos);return (T)array[pos];}@Overridepublic void set(int pos, T value) {rangeCheckForGetAndSet(pos);checkCapacity();array[pos]=value;}@Overridepublic void remove(T toRemove) {int pos=indexOf(toRemove);if (pos==-1){return; // 元素不存在,直接返回}for (int i=pos;i<size-1;i++){array[i]=array[i+1];}array[size-1]=null;// 清理最后一个元素size--;}@Overridepublic int size() {return size;}@Overridepublic void clear() {size=0;}public String toString(){StringBuilder sb = new StringBuilder("[");for (int i = 0; i < size; i++) {sb.append(array[i]);if (i < size - 1) {sb.append(", ");}}sb.append("]");return sb.toString();}
}

3. ArrayList

在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:
图片

  1. ArrayList是以泛型方式实现的,使用时必须要先实例化
  2. ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问
  3. ArrayList实现了Cloneable接口,表明ArrayList是可以clone的
  4. ArrayList实现了Serializable接口,表明ArrayList是支持序列化的
  5. 和Vector不同,ArrayList不是线程安全的,在单线程下可以使用,在多线程中可以选择CopyOnWriteArrayList
  6. ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表

4. ArrayList的问题以及思考

##4.1 插入或删除元素的性能问题(时间复杂度 O(N))

ArrayList 底层是基于数组实现的,插入或删除元素时,所有后续元素需要整体移动,导致时间复杂度为 O(N)。

  • 使用链表(LinkedList
    • 对于频繁插入或删除操作的场景,LinkedList 是更好的选择。
    • LinkedList 是基于双向链表实现的,插入和删除的时间复杂度为 O(1)(只需调整指针),但随机访问的时间复杂度为 O(N)。
    • 适用场景:需要频繁插入或删除的场景,但随机访问较少。
  • 使用 ArrayDeque
    • 如果操作集中在首尾两端,可以使用 ArrayDeque,它支持高效的首尾插入和删除操作。
  • 优化插入/删除的逻辑
    • 如果需要频繁插入或删除,尽量批量操作,而不是逐个操作。例如,先将需要插入的数据存储在临时集合中,最后一次性合并到目标集合。

4.2 增容的性能消耗问题

ArrayList 增容时需要重新分配新空间,并将旧数组的数据拷贝到新数组中,这会带来性能开销。

  • 预估容量,合理初始化 ArrayList 的初始容量

    • 在创建ArrayList时,尽量根据实际需求指定初始容量,避免频繁增容。例如:

      ArrayList<Integer> list = new ArrayList<>(1000);
      

      这样可以减少扩容操作的发生。

  • 使用 ArrayList.ensureCapacity() 方法

    • 如果知道大概需要插入的元素数量,可以在插入数据前调用ensureCapacity()方法手动扩容,避免多次增容。例如:

      list.ensureCapacity(1000);
      
  • 使用其他动态数据结构

    • 如果扩容的性能开销成为瓶颈,可以考虑使用其他动态数据结构(如 LinkedListArrayDeque),具体选择取决于场景需求。

4.3 空间浪费问题

ArrayList 增容时容量通常增长为原来的 2 倍,会导致未使用的空间浪费。

  • 手动调整容量

    • 在确定不再需要新增元素时,可以调用ArrayList.trimToSize()方法,将ArrayList的容量调整为当前元素的实际大小,减少空间浪费。例如:

      list.trimToSize();
      
  • 使用其他集合类(如 LinkedList

    • 如果对空间利用率要求较高,可以考虑使用 LinkedList,因为它的空间分配是动态的,不会预留多余的空间。
  • 动态调整容量增长策略

    • 如果对 ArrayList 的增容策略不满意,可以自定义一个集合类,继承自 ArrayList,并重写其扩容逻辑。例如,可以改为按固定大小增长,而不是倍增。

相关文章:

数据结构-ArrayList

文章目录 1. 线性表2. 顺序表3. ArrayList4. ArrayList的问题以及思考4.2 增容的性能消耗问题4.3 空间浪费问题 1. 线性表 线性表&#xff08;Linear List&#xff09;是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构&#xff0c;常见线性表&…...

[快乐学坊_2] 后端api测试

[快乐学坊management_1] With Cursor | Mysql设计 | 服务接口设计与开发 在 apifox 测试发现&#xff0c;500 报错&#xff0c;因为AI 辅助配置的数据库有点问题我们要来进行更改一下 重连一下我们上一篇文章中 配置好了的 mysql 然后就可以观察到&#xff0c;连接 成功了。我…...

盛铂科技国产SLMF315超低相位噪声频率综合器介绍

SLMF315频率综合器简介&#xff1a; 盛铂科技SLMF315超低相位噪声频率综合器的频率范围覆盖200MHz至15GHz。频率的最小步进仅为0.1Hz&#xff0c;在不考虑频率精度的情况下频率步进可达0.04Hz。SLMF315内部采用多环路设计从而获得极优秀的相位噪声特性&#xff0c;频率输出为1…...

用 pytorch 从零开始创建大语言模型(六):对分类进行微调

用 pytorch 从零开始创建大语言模型&#xff08;六&#xff09;&#xff1a;对分类进行微调 6 微调用于分类6.1 微调的不同类别6.2 准备数据集6.3 创建数据加载器6.4 使用预训练权重初始化模型6.5 添加分类头部6.6 计算分类损失和准确率6.7 在监督数据上微调模型6.8 使用LLM进…...

Android Compose 层叠布局(ZStack、Surface)源码深度剖析(十三)

Android Compose 层叠布局&#xff08;ZStack、Surface&#xff09;源码深度剖析 一、引言 在 Android 应用开发领域&#xff0c;用户界面&#xff08;UI&#xff09;的设计与实现一直是至关重要的环节。随着技术的不断演进&#xff0c;Android Compose 作为一种全新的声明式…...

计算机网络-2 物理层

【考纲内容】 &#xff08;一&#xff09;通信基础 信道、信号、带宽、码元、波特、速率、信源与信宿等基本概念&#xff1b; 奈奎斯特定理与香农定理&#xff1b;编码与调制&#xff1b; 电路交换、报文交换与分组交换&#xff1b;数据报与虚电路① 视频讲解 &#xff08;二…...

如何解决微服务调用链性能问题(优化 JVM 配置,降低 Full GC 频率)

1. 问题背景 在微服务架构中&#xff0c;服务之间的调用链较长&#xff0c;且频繁的远程调用可能导致性能瓶颈。同时&#xff0c;JVM 的 Full GC&#xff08;Full Garbage Collection&#xff09;频繁发生会导致应用暂停时间过长&#xff0c;影响用户体验。具体问题表现为&…...

深入理解 C# 反射 的使用

总目录 前言 反射是.NET框架中一个强大的特性&#xff0c;允许程序在运行时检查和操作类型信息。通过反射&#xff0c;开发者可以动态地创建对象、调用方法、访问属性等&#xff0c;为程序提供了极大的灵活性。本文将详细讲解C#反射的使用方法及其应用场景。 一、什么是反射&a…...

Java面试第十三山!《设计模式》

大家好&#xff0c;我是陈一。如果文章对你有帮助&#xff0c;请留下一个宝贵的三连哦&#xff5e; 万分感谢&#xff01; 一、设计模式入门指南 1. 什么是设计模式&#xff1f; 设计模式是可复用的解决方案模板&#xff0c;用于解决软件开发中常见的架构问题。如同建筑领域的…...

AI+视频赋能智慧农业:EasyCVR打造全域可视化农场监管平台

随着科技的飞速发展&#xff0c;传统农业正加速向智慧农业转型&#xff0c;农场管理也迎来了前所未有的变革机遇。在这一进程中&#xff0c;如何有效整合先进的信息技术&#xff0c;实现农场的精准化、智能化管理&#xff0c;成为了摆在农场主和农业管理者面前的关键课题。 基于…...

wsl2配置xv6全解(包括22.04Jammy)

文章目录 获取xv6源代码Ubuntu20.04 Version安装指令成功测试参考MIT2021年官方文档 24.04 Version安装指令成功测试参考MIT2024年官方文档 Ubuntu 22.04没有官方文档&#xff1f; 配置大体流程1. 卸载原本qemu&#xff08;如果之前安装了&#xff09;2. clone qemu官方源代码&…...

区块链技术的应用场景和优势

区块链技术是一种分布式数据库技术&#xff0c;它的应用场景和优势包括但不限于以下几点&#xff1a; 金融领域&#xff1a;区块链可以用于数字货币的交易和结算&#xff0c;实现去中心化的金融交易&#xff0c;提供更安全、透明和高效的支付方式&#xff1b;另外&#xff0c;也…...

基于深度学习的相位调制算法步骤

1.构建网络结构 2.制作数据集 3.训练网络 4.引入评价指标 5.迭代优化 总结 通过以上步骤&#xff0c;可以实现基于深度学习的相位调制算法&#xff1a; 使用 U-Net 构建神经网络。 生成数据集并训练网络。 使用训练好的网络预测相位分布。 通过相关系数 γ 评估调制效果&…...

Linux的I2C总线的原理和结构详解

Linux的I2C总线的原理和结构讲解 我前面基本已经吃透了Platform总线&#xff0c;关于Platform总线的原理和结构&#xff0c;详情见下面三篇博文&#xff1a; https://blog.csdn.net/wenhao_ir/article/details/145023181 https://blog.csdn.net/wenhao_ir/article/details/14…...

深入理解Linux中的SCP命令:使用与原理

在Linux系统中&#xff0c;文件传输是一个常见的操作。无论是将文件从本地传输到远程服务器&#xff0c;还是从远程服务器下载文件到本地&#xff0c;SCP&#xff08;Secure Copy Protocol&#xff09;都是一个非常实用的工具。本文将详细介绍SCP命令的使用方法&#xff0c;并深…...

【Android】VehiclePropertyAccess引起CarService崩溃

VehiclePropertyAccess引起CarService崩溃 VehiclePropertyAccess VehiclePropertyAccess属性&#xff0c;用于定义车辆属性的访问权限。权限包括 读&#xff1a;READ&#xff0c;只可以读取&#xff0c;不能写入。 VehiclePropertyAccess:READ写&#xff1a;WRITE&#xf…...

小米AX6000解锁ssh避坑笔记

经过网上教程不断尝试,终于解锁成功。 环境信息: Win10 笔记本 + AX210 WIFI6E网卡Vmware 16小米AX60000.可以先备份路由器的配置信息 1.首先降级小米AX6000到1.0.55 1.0.55下载路径 升级时注意: 清除当前所有用户配置升级完成后,选择不自动升级2.升级完成后,笔记本重新…...

论华为 Pura X 折叠屏性能检测

在科技浪潮中&#xff0c;折叠屏手机以其创新形态掀起市场热潮。华为 Pura X 作为华为最新折叠手机&#xff0c;承载前沿科技与精湛工艺&#xff0c;成为行业焦点。它融合先进折叠屏技术与优质材质&#xff0c;致力于打破传统手机使用边界&#xff0c;为用户开启全新体验。但产…...

关于极端场景下,数据库更新与 MQ 消息一致性保障方案的详细总结

目录 一、核心问题场景 二、RocketMQ 事务消息方案 1. 核心机制 2. 执行流程 3. 关键优势 4. 局限性 三、消息表方案 1. 核心机制 2. 执行流程 3. 关键优势 4. 局限性 四、方案对比与选择 五、实施建议 六、总结 一、核心问题场景 当数据库更新后,若 MQ 消息未…...

面试题精选《剑指Offer》:JVM类加载机制与Spring设计哲学深度剖析-大厂必考

一、JVM类加载核心机制 &#x1f525; 问题5&#xff1a;类从编译到执行的全链路过程 完整生命周期流程图 关键技术拆解 编译阶段 查看字节码指令&#xff1a;javap -v Robot.class 常量池结构解析&#xff08;CONSTANT_Class_info等&#xff09; 类加载阶段 // 手动加载…...

透析主流CSS预处理器的区别

Sass 和 Less 是两种主流的 CSS 预处理器&#xff08;CSS Preprocessor&#xff09;&#xff0c;它们通过扩展原生 CSS 的语法&#xff0c;提供了变量、嵌套、混合&#xff08;Mixins&#xff09;、函数等高级功能&#xff0c;帮助开发者编写更高效、可维护的样式代码。以下是它…...

Redis 本地安装

首先安装&#xff1a; https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-from-source/ 进入root目录 tar -xzvf redis-stable.tar.gz cd redis-stable make然后 install sudo make install最后可以直接启动 redis-server但是此时启…...

Android Launcher3 首屏图标锁定技术方案解析

一、需求背景与技术挑战 在Android 13系统定制开发中&#xff0c;需实现Launcher首屏图标固定功能。该需求需在以下技术维度进行突破&#xff1a; 拖拽事件拦截机制&#xff1a;需精准识别拖拽目标区域 布局层级判定&#xff1a;准确识别第一屏的布局标识 跨屏操作限制&…...

MySQL 处理重复数据:保留一条与两条的实现方案

在数据库管理中&#xff0c;处理重复数据是一项常见的任务。本文将详细介绍如何在 MySQL 数据库里&#xff0c;针对 test 表中 fd 和 fe 字段存在的重复数据进行处理&#xff0c;分别实现保留一条和两条数据的操作。 表结构与需求概述 假设 test 表包含三个字段&#xff1a;id…...

Go红队开发—CLI框架(一)

CLI开发框架 命令行工具开发&#xff0c;主要是介绍开发用到的包&#xff0c;集成了一个框架&#xff0c;只要学会了基本每个人都能开发安全工具了。 该文章先学flags包&#xff0c;是比较经典的一个包&#xff0c;相比后面要学习的集成框架这个比较自由比较细化点&#xff0…...

deque

deque概念 双端数组&#xff0c;可以对头端进行插入删除操作 deque和vector差别(就像数据结构中的栈和队列) vector对于头部的插入删除效率低&#xff0c;而deque则相对高效 vector和deque都支持随机访问&#xff0c;但是vector的随机访问效率低&#xff0c;而deque则相对高效…...

【Oracle资源损坏类故障】:详细了解坏块

目录 1、物理坏块与逻辑坏块 1.1、物理坏块 1.2、逻辑坏块 2、两个坏块相关的参数 2.1、db_block_checksum 2.2、db_block_checking 3、检测坏块 3.1、告警日志 3.2、RMAN 3.3、ANALYZE 3.4、数据字典 3.5、DBVERIFY 4、修复坏块 4.1、RMAN修复 4.2、DBMS_REPA…...

数据分析处理库-Pandas

1.1 Pandas概述 核心概念&#xff1a; Pandas 是基于 NumPy 的数据分析库&#xff0c;核心数据结构&#xff1a;Series&#xff08;一维&#xff09;和 DataFrame&#xff08;二维&#xff09;。 应用场景&#xff1a;数据清洗、转换、统计分析、时间序列处理。 特点&#x…...

阿里云平台Vue项目打包发布

目录&#xff1a; 1、vue项目打包2、通过ngixn发布vue的打包文件 1、vue项目打包 在你的vue项目下执行npm run build命令进行打包。 2、通过ngixn发布vue的打包文件 直接将打包的dist文件拷贝到nginx目录下即可。 修改nginx.conf的配置文件的相关配置&#xff0c;如端口或者ro…...

2025/03/19 Cursor使用方法(Java方向,适合Java后端把家从idea搬家到cursor)

Cursor介绍 官网:Cursor - The AI Code Editor 中文教程网:学习 Cursor &#xff0c;拥抱 AI 编程 | Cursor 101 Cursor 是一款专为程序员打造的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它结合了大语言模型的能力&#xff0c;旨在提高开发效率. 与传统的 IDE&…...

平台与架构:深度解析与开发实践

平台与架构&#xff1a;深度解析与开发实践 1. 什么是平台与架构&#xff1f; 平台&#xff08;Platform&#xff09;&#xff1a;指操作系统或运行环境&#xff0c;例如 linux、windows、darwin&#xff08;macOS&#xff09;、android 等。架构&#xff08;Architecture&…...

xss-labs第八、九关卡以及XSS GAME的Ok,Boomer关卡

第八关 靶场代码 <!DOCTYPE html><!--STATUS OK--><html> <head> <meta http-equiv"content-type" content"text/html;charsetutf-8"> <script> window.alert function() { confirm("完成的不错&#…...

electron框架(1.0)认识electron和基础创建

----什么是electron框架 中文网地址&#xff08;https://electronjs.p2hp.com/docs/latest/tutorial/quick-start&#xff09; ----electron流程模型 ----项目搭建 --起步&#xff08;需下载&#xff09;&#xff1a; node -v npm -v--创建初始文件&#xff1a; mkdir my-e…...

考OCP认证要交哪些费用?

考OCP认证要交哪些费用? 考OCP认证&#xff0c;指的是Oracle数据库管理员中级认证 Oracle Certified Professional&#xff0c;这是Oracle非常有名的一个认证&#xff0c;对于个人帮助巨大。 OCP认证要交不少钱&#xff0c;些费用因考试版本、培训机构和地区差异而有所不同&a…...

基于漂浮式海上风电场系统的浮式风力发电机matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于漂浮式海上风电场系统的浮式风力发电机matlab仿真&#xff0c;通过MATLAB数值仿真对浮式风力发电机的性能做模拟与仿真。 2.系统仿真结果 3.核心程序与模型 版本&#x…...

Jupyter Notebook 常用命令(自用)

最近有点忘记了一些常见命令&#xff0c;这里就记录一下&#xff0c;懒得找了。 文章目录 一、文件操作命令1. %cd 工作目录2. %pwd 显示路径3. !ls 列出文件4. !cp 复制文件5. !mv 移动或重命名6. !rm 删除 二、代码调试1. %time 时间2. %timeit 平均时长3. %debug 调试4. %ru…...

RabbitMQ 详细原理解析

RabbitMQ 是一个基于 AMQP&#xff08;Advanced Message Queuing Protocol&#xff09; 协议的开源消息代理中间件&#xff0c;广泛用于分布式系统中的异步通信、服务解耦、流量削峰等场景。其核心设计围绕生产者、消费者、队列、交换机和虚拟主机等组件&#xff0c;结合 AMQP …...

HTTP状态码全解析

1. 状态码分类 类别范围含义1xx100-199信息性&#xff1a;请求被接收&#xff0c;需进一步处理&#xff08;临时响应&#xff09;2xx200-299成功&#xff1a;请求被正确处理3xx300-399重定向&#xff1a;需后续操作完成请求&#xff08;如跳转到新URL&#xff09;4xx400-499客…...

从零实现本地文生图部署(Stable Diffusion)

1. 依赖安装 文件打包下载地址&#xff08;Stable Diffusion&#xff09; # git &#xff1a; 用于下载源码 https://git-scm.com/downloads/win # Python 作为基础编译环境 https://www.python.org/downloads/ # Nvidia 驱动&#xff0c;用于编译使用GPU显卡硬件 https://ww…...

手撕算法——链表

算法基础——链表-CSDN博客 一、排队顺序 题⽬来源&#xff1a;洛⾕ 题⽬链接&#xff1a;B3630 排队顺序 - 洛谷 难度系数&#xff1a;★ 1. 题目描述 2. 算法原理 本题相当于告诉了我们每⼀个点的后继&#xff0c;使⽤静态链表的存储⽅式能够很好的还原这个队列。 数组中 [1,…...

css-grid布局

文章目录 1、布局2、网格轨道3、间距Gap4、网格线5、网格别名 当一个 HTML 元素将 display 属性设置为 grid 或 inline-grid 后&#xff0c;它就变成了一个网格容器&#xff0c;这个元素的所有直系子元素将成为网格元素。 1、布局 启用grid布局类似与flex布局&#xff0c;不过g…...

1.企业级AD活动目录核心解析:架构、组件与集成实践

在当今数字化时代&#xff0c;企业级网络环境日益复杂&#xff0c;高效、安全的资源管理和用户认证成为企业 IT 运营的关键。AD&#xff08;Active Directory&#xff09;活动目录作为微软 Windows 系列服务器中的重要目录服务&#xff0c;为企业级网络管理提供了强大的解决方案…...

哈尔滨工业大学DeepSeek公开课人工智能:大模型原理 技术与应用-从GPT到DeepSeek|附视频下载方法

导 读INTRODUCTION 今天继续哈尔滨工业大学车万翔教授带来了一场主题为“DeepSeek 技术前沿与应用”的报告。 本报告深入探讨了大语言模型在自然语言处理&#xff08;NLP&#xff09;领域的核心地位及其发展历程&#xff0c;从基础概念出发&#xff0c;延伸至语言模型在机器翻…...

ChatGPT vs DeepSeek vs Copilot vs Claude:谁将问鼎AI王座?

李升伟 整理 2025年的人工智能领域创新涌动&#xff0c;ChatGPT、DeepSeek、Copilot和Claude四大模型各领风骚。这些AI系统各具特色&#xff0c;分别专注于编程、创意写作、技术推理和AI伦理等不同领域。本文将深入解析这些AI模型的功能特性及其优势领域。 核心AI模型解析 C…...

【嵌入式Linux】基于ArmLinux的智能垃圾分类系统项目

目录 1. 功能需求2. Python基础2.1 特点2.2 Python基础知识2.3 dict嵌套简单说明 3. C语言调用Python3.1 搭建编译环境3.2 直接调用python语句3.3 调用无参python函数3.4 调用有参python函数 4. 阿里云垃圾识别方案4.1 接入阿里云4.2 C语言调用阿里云Python接口 5. 香橙派使用摄…...

Vue3中router最佳封装落地

文章目录 前言一、拆分路由文件夹&#xff1f;二、main.ts中注册路由总结 前言 router在使用过程中如果我们直接在一个文件的一个数组中配置&#xff0c;最后路由越来越多会导致不易管理&#xff0c;我们可以将一个页面的路由配置在一个数组中最后统一导入&#xff0c;这样就会…...

[Linux] make自动化构建

目录 一.什么是make 二.Makefile结构 2.1 典型结构 2.2 变量 1. 普通变量&#xff08;User-Defined Variables&#xff09; 2. 自动变量&#xff08;Automatic Variables&#xff09; 3. 预定义变量&#xff08;Built-in Variables&#xff09; 4. 函数变量&#xff0…...

剑指 Offer II 113. 课程顺序

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20113.%20%E8%AF%BE%E7%A8%8B%E9%A1%BA%E5%BA%8F/README.md 剑指 Offer II 113. 课程顺序 题目描述 现在总共有 numCourses 门课需要选&#xff0c;记为 0 到 n…...

蓝桥杯 小球反弹

问题描述 有一个长方形&#xff0c;长为 343720 单位长度&#xff0c;宽为 233333 单位长度。 在其内部左上角顶点有一小球&#xff08;无视其体积&#xff09;&#xff0c;其初速度方向如图所示&#xff0c;且保持运动速率不变。分解到长宽两个方向上的速率之比为&#xff1…...

Python 监听模式(Observer Pattern)

1. 监听模式技术方案 监听模式&#xff08;Observer Pattern&#xff09;是一种行为设计模式&#xff0c;允许对象&#xff08;称为“观察者”或“监听者”&#xff09;在另一个对象&#xff08;称为“被观察者”或“主题”&#xff09;的状态发生变化时接收通知。这种模式的核…...