Java-List集合类全面解析
Java-List集合类全面解析
- 前言
- 一、List接口概述与核心特性
- 1.1 List在集合框架中的位置
- 1.2 List的核心特性
- 1.3 常见实现类对比
- 二、ArrayList源码剖析与应用场景
- 2.1 内部结构与初始化
- 2.2 动态扩容机制
- 2.3 性能特点与最佳实践
- 三、LinkedList 源码剖析与应用场景
- 3.1 内部结构与节点定义
- 3.2 核心操作实现
- 3.3 与 ArrayList 的性能对比
- 四、线程安全的 List 实现
- 4.1 Vector 的使用与局限性
- 4.2 CopyOnWriteArrayList 原理
- 4.3 适用场景对比
- 五、List 的高级应用技巧
- 5.1 不可变 List 的创建
- 5.2 List 的排序操作
- 5.3 列表转换与过滤(Java 8+)
- 六、常见问题与解决方案
- 6.1 并发修改异常(ConcurrentModificationException)
- 6.2 性能优化建议
- 七、List 类的典型应用场景
- 7.1 数据缓存
- 7.2 任务队列
- 7.3 线程安全配置中心
- 总结
前言
Java中集合框架是数据处理的核心工具之一,List
作为单列集合Collection
的重要子接口,凭借其有序、可重复的特性,成为日常开发中使用频率极高的组件。本文将从基础概念入手,深入剖析List
接口及其实现类的内部机制、应用场景与最佳实践,并结合大量代码示例帮助读者全面掌握这一核心知识点。
一、List接口概述与核心特性
1.1 List在集合框架中的位置
Java集合框架主要分为两大体系:单列集合Collection
和双列集合Map
。List
作为Collection
的直接子接口,继承了Collection
的基本操作,并额外提供了基于索引的访问能力。其继承关系如下:
java.lang.Object↳ java.util.Collection<E>↳ java.util.List<E>
1.2 List的核心特性
与其他Collection
接口相比,List
具有以下显著特点:
-
有序性:元素按照插入顺序排列,可以通过索引精确访问
-
可重复性:允许存储重复元素
-
索引支持:提供基于0的整数索引操作元素
-
丰富的操作方法:新增了
add(index, element)
、get(index)
、remove(index)
等索引相关方法
1.3 常见实现类对比
实现类 | 数据结构 | 线程安全 | 特点 |
---|---|---|---|
ArrayList | 动态数组 | 否 | 随机访问快,插入删除慢,默认容量10,扩容因子1.5 |
LinkedList | 双向链表 | 否 | 插入删除快,随机访问慢,实现了`Deque`接口 |
Vector | 动态数组 | 是 | 线程安全但性能较低,扩容因子2 |
CopyOnWriteArrayList | 写时复制数组 | 是 | 读操作无锁,写操作复制数组,适用于读多写少场景 |
二、ArrayList源码剖析与应用场景
2.1 内部结构与初始化
ArrayList的核心是一个动态扩容的Object数组:
transient Object[] elementData; // 存储元素的数组
private int size; // 实际元素数量
初始化时可指定初始容量:
// 默认构造器,初始为空数组,首次添加元素时扩容为10
public ArrayList() {this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}// 指定初始容量
public ArrayList(int initialCapacity) {if (initialCapacity > 0) {this.elementData = new Object[initialCapacity];}
}
2.2 动态扩容机制
当元素数量超过数组容量时,会触发扩容操作:
private void grow(int minCapacity) {int oldCapacity = elementData.length;int newCapacity = oldCapacity + (oldCapacity >> 1); // 扩容为原容量的1.5倍if (newCapacity - minCapacity < 0)newCapacity = minCapacity;elementData = Arrays.copyOf(elementData, newCapacity);
}
2.3 性能特点与最佳实践
-
优势场景:频繁随机访问、较少插入删除操作
-
注意事项:
-
初始容量设置:预计元素数量较大时,建议指定合理初始容量减少扩容次数
-
避免中间插入删除:此类操作会导致后续元素整体移动,时间复杂度 O (n)
-
// 示例:预分配容量提高性能
ArrayList<String> list = new ArrayList<>(1000);
for (int i = 0; i < 1000; i++) {list.add("element" + i); // 避免多次扩容
}
三、LinkedList 源码剖析与应用场景
3.1 内部结构与节点定义
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;}
}
3.2 核心操作实现
插入操作仅需修改前后节点引用:
// 在指定位置插入元素
void linkBefore(E e, Node<E> succ) {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++;
}
3.3 与 ArrayList 的性能对比
操作类型 | ArrayList 时间复杂度 | LinkedList 时间复杂度 |
---|---|---|
随机访问 get (i) | O(1) | O(n) |
尾部插入 add (e) | O (1)(可能扩容) | O(1) |
中间插入 add (i,e) | O (n)(元素移动) | O (n/2)(定位节点) |
删除指定元素 remove (e) | O (n)(查找 + 移动) | O (n)(查找) |
四、线程安全的 List 实现
4.1 Vector 的使用与局限性
Vector 是早期的线程安全 List 实现,所有公共方法都使用synchronized
修饰:
public synchronized E get(int index) {if (index >= elementCount)throw new ArrayIndexOutOfBoundsException(index);return elementData(index);
}
但这种粗粒度同步导致性能较差,现代开发中已较少使用。
4.2 CopyOnWriteArrayList 原理
采用写时复制策略,写操作会创建新数组:
public boolean add(E e) {final ReentrantLock lock = this.lock;lock.lock();try {Object[] elements = getArray();int len = elements.length;Object[] newElements = Arrays.copyOf(elements, len + 1);newElements[len] = e;setArray(newElements);return true;} finally {lock.unlock();}
}
4.3 适用场景对比
-
Vector:适用于遗留系统,需要全面线程安全保证
-
CopyOnWriteArrayList:适用于读多写少场景,如配置中心、事件监听器列表
五、List 的高级应用技巧
5.1 不可变 List 的创建
使用Collections.unmodifiableList
或 Java 9 + 的List.of
创建不可变列表:
// Java 9+
List<String> immutableList = List.of("a", "b", "c");// 基于现有列表创建
List<String> original = new ArrayList<>();
List<String> unmodifiable = Collections.unmodifiableList(original);
5.2 List 的排序操作
使用Collections.sort
或List.sort
方法:
// 自然排序
list.sort(Comparator.naturalOrder());// 自定义排序
list.sort((e1, e2) -> e1.getName().compareTo(e2.getName()));
5.3 列表转换与过滤(Java 8+)
利用 Stream API 进行转换和过滤:
List<String> names = people.stream().filter(p -> p.getAge() > 18).map(Person::getName).collect(Collectors.toList());
六、常见问题与解决方案
6.1 并发修改异常(ConcurrentModificationException)
在使用迭代器遍历 List 时修改结构会抛出此异常,解决方案:
-
使用
Iterator.remove()
方法 -
使用
CopyOnWriteArrayList
-
使用 for 循环倒序遍历
// 安全删除示例
for (Iterator<String> it = list.iterator(); it.hasNext(); ) {String item = it.next();if (condition) {it.remove(); // 安全删除}
}
6.2 性能优化建议
-
对于 ArrayList,预估容量避免频繁扩容
-
避免在 LinkedList 中使用随机访问
-
批量操作优先使用
addAll
而非循环添加
七、List 类的典型应用场景
7.1 数据缓存
使用 ArrayList 存储热点数据,利用其快速随机访问特性:
public class DataCache {private final List<Data> cache = new ArrayList<>();public Data getById(int id) {return cache.get(id); // O(1)访问}
}
7.2 任务队列
使用 LinkedList 实现 FIFO 队列:
public class TaskQueue {private final LinkedList<Runnable> queue = new LinkedList<>();public synchronized void enqueue(Runnable task) {queue.addLast(task);}public synchronized Runnable dequeue() {return queue.pollFirst();}
}
7.3 线程安全配置中心
使用 CopyOnWriteArrayList 存储配置项:
public class ConfigCenter {private final CopyOnWriteArrayList<ConfigItem> configs = new CopyOnWriteArrayList<>();public void addConfig(ConfigItem item) {configs.add(item); // 写操作线程安全}public List<ConfigItem> getAllConfigs() {return new ArrayList<>(configs); // 读操作无锁}
}
总结
根据情况选择合适的 List 实现
-
需要快速随机访问:ArrayList
-
需要频繁插入删除:LinkedList
-
需要线程安全:CopyOnWriteArrayList(读多写少)或 Vector(全同步)
通过深入理解 List 接口及其实现类的内部机制和应用场景,我们可以更加高效地使用这一核心工具,编写出性能优异、结构清晰的代码。希望本文能够帮助读者全面掌握 Java List 类的使用技巧,在实际开发中发挥更大的价值。
若这篇内容帮到你,动动手指支持下!关注不迷路,干货持续输出!
ヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノ
相关文章:
Java-List集合类全面解析
Java-List集合类全面解析 前言一、List接口概述与核心特性1.1 List在集合框架中的位置1.2 List的核心特性1.3 常见实现类对比 二、ArrayList源码剖析与应用场景2.1 内部结构与初始化2.2 动态扩容机制2.3 性能特点与最佳实践 三、LinkedList 源码剖析与应用场景3.1 内部结构与节…...
在Cursor中启用WebStorm/IntelliJ风格快捷键
在Cursor中启用WebStorm/IntelliJ风格快捷键 方法一:使用预置快捷键方案 打开快捷键设置 Windows/Linux: Ctrl K → Ctrl SmacOS: ⌘ K → ⌘ S 搜索预设方案 在搜索框中输入keyboard shortcuts,选择Preferences: Open Keyboard Shortcuts (JSON) …...
32、跨平台咒语—— React Native初探
一、时空晶体架构(核心原理) 1. 量子组件桥接协议 // 原生组件映射 <View> → iOS UIView / Android ViewGroup <Text> → UILabel / TextView 魔法特性: • JavaScriptCore引擎:通过V8/Hermes引擎执行JS逻辑…...
无源探头衰减比与带宽特性的关联性研究
引言 在电子测量领域,无源探头作为示波器的重要附件,其性能参数直接影响测量结果的准确性。本文将从电路设计原理出发,深入分析衰减比与带宽这两个关键参数的相互关系,帮助工程师正确理解并选择适合的测量探头。 技术原理分析 …...
虚拟机的三个核心类加载器
虚拟机的三个核心类加载器 在Java虚拟机(JVM)中,类加载器(ClassLoader)负责将类的字节码加载到内存中,并生成对应的Class对象。以下是三个核心类加载器的详细说明: 1. 启动类加载器(Bootstrap ClassLoader) 职责: 加载Java核心类库(如java.lang、java.util等),位…...
国家互联网信息办公室关于发布第十一批深度合成服务算法备案信息的公告
wenz 根据《互联网信息服务深度合成管理规定》,现公开发布第十一批境内深度合成服务算法备案信息,具体信息可通过互联网信息服务算法备案系统(https://beian.cac.gov.cn)进行查询。任何单位或个人如有疑议,请发送邮件…...
深入理解动态规划:从斐波那契数列到最优子结构
引言 动态规划(Dynamic Programming, DP)是算法设计中一种非常重要的思想,广泛应用于解决各类优化问题。许多看似复杂的问题,通过动态规划的视角分析,往往能找到高效的解决方案。本文将系统介绍动态规划的核心概念,通过经典案例展…...
AT 指令详解:基于 MCU 的通信控制实战指南AT 指令详解
在 MCU(单片机)项目中,我们经常需要与各种通信模组(GSM、Wi-Fi、蓝牙等)交互。而这类模组通常都通过串口(UART)与 MCU 通信,控制它们的“语言”就是——AT 指令。 一、什么是 AT 指…...
初学c语言16(内存函数)
1.memcpy 形式: 功能:完成内存块拷贝(所以可拷贝任何类型的数据) 过程:从source开始拷贝num个字节的数据到destination指向的空间里 返回值:返回目标空间的起始地址 应用: 模拟实现…...
【git进阶】git rebase(变基)
文章目录 合并分支提交信息修改合并提交记录时间问题1时间问题2时间问题3git rebase有很多用武之地,我一一道来 合并分支 当多人协作同一个分支时,在提交我们自己版本之前,我们会先用git pull获取远端最新的版本。但是 git pull = git fetch + git mergegit merge是一个非…...
Pytorch---view()函数
在PyTorch中,view函数是一个极为重要的张量操作函数,其主要功能是对张量的形状进行重塑,与此同时会尽力维持张量中元素的总数不变。 1. 基本功能与语法 view函数的主要作用是改变张量的维度和大小,不过要保证重塑前后张量的元素…...
AI Agent开发第71课-一个完善的可落地企业AI Agent全架构
开篇 在之前的若干篇章里我们大量叙述了DIFY AI工作流、重排序、提示词重写、文档chunk、AI翻页、各种高级RAG应用以及AI Agent案例甚至全代码的输出。 目的,就是为了帮助大家认识到这么一件事,那就是: 当前AI主要还是在被叫好却不卖座,很多人(包括我身边的太多大厂)去…...
Prompt、Agent、MCP关系
AI基础概念概述 链接: https://www.bilibili.com/video/BV1aeLqzUE6L?t419.4 Agent(智能体):智能体是能够执行特定任务的程序或实体,它可以根据环境变化调整自身行为。 MCP(多通道协议):MCP是…...
人工智能100问☞第27问:神经网络与贝叶斯网络的关系?
神经网络与贝叶斯网络是两种互补的智能模型:神经网络通过多层非线性变换从数据中学习复杂模式,擅长大规模特征提取和预测,而贝叶斯网络基于概率推理建模变量间的条件依赖关系,擅长处理不确定性和因果推断。两者的融合(如贝叶斯神经网络)结合了深度学习的表征能力与概率建…...
Vue-样式绑定-style
样式绑定-style 对象写法数组写法 对象写法 :style"{fontSize: x}", x是动态值 ({fontSize: x}是样式对象) 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>…...
Python60日基础学习打卡D30
回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) # 直接导入 from random import randint print(randint(1, 10)) # 导入自定义库 import module m…...
el-upload图片设置了url不显示问题
引用:可以使用Image组件测试url是否可以用 此时不显示图片,因为打印后提示图片加载失败 此时图片显示 使用的base64的格式。但要注意在生成的base64码前要加上data:image/png;base64的内容才可以赋值给url...
学习黑客PowerShell的历史、架构与工作原理深度解析
PowerShell的历史、架构与工作原理深度解析 🔍 作者: 海尔辛 | 发布时间: 2025-05-19 12:28:44 UTC 1. PowerShell的历史演变 📜 🔹 诞生背景与起源 PowerShell的诞生源于微软解决Windows管理工具碎片化问题的需求。在PowerShell出现之前…...
视觉-和-语言导航的综述:任务、方法和未来方向
22年6月来自UC Santa Cruz、澳大利亚的阿德莱德大学和 USC 的论文“Vision-and-Language Navigation: A Survey of Tasks, Methods, and Future Directions”。 人工智能研究的一个长期目标是构建能够用自然语言与人类交流、感知环境并执行现实世界任务的智体。视觉与语言导航…...
JUC入门(四)
ReadWriteLock 代码示例: package com.yw.rw;import java.util.HashMap; import java.util.Map; import java.util.concurrent.locks.ReentrantReadWriteLock;public class ReadWriteDemo {public static void main(String[] args) {MyCache myCache new MyCache…...
day 21 常见降维算法
一、无监督降维 定义:这类算法在降维过程中不使用任何关于数据样本的标签信息(比如类别标签、目标值等)。它们仅仅根据数据点本身的分布、方差、相关性、局部结构等特性来寻找低维表示。 输入:只有特征矩阵 X。 目标:…...
代理IP高可用性与稳定性方案:负载均衡、节点健康监测与智能切换策略
一、负载均衡策略:动态分配与场景适配 多算法协同调度 轮询与加权轮询:适用于定时数据采集等低频任务,通过静态IP池按顺序分配请求,避免单一节点过载。例如,静态IP池可支持电商商品价格监控,按固定周期切换…...
C语言:在操作系统中,链表有什么应用?
在操作系统中,链表是一种重要的数据结构,凭借其灵活的内存管理和高效的插入/删除特性,被广泛应用于多个核心模块。以下是其主要应用场景及详细说明: 1. 内存管理:空闲内存块管理 应用场景:操作系统需要管…...
RocketMQ
一、引言 Message Queue(消息 队列),从字⾯上理解:⾸先它是⼀个队列。FIFO先进先出的数据结构——队列。消息队列就是所谓的存放消息的队列。 消息队列解决的不是存放消息的队列的⽬的,解决的是通信问题。 …...
学习BI---QuickBI介绍
BI是什么 BI 数据仓库(存数据) OLAP(多维分析) 数据挖掘(找规律) 可视化(图表/看板) 人话解释就是把企业里乱七八糟的数据变成老板能看懂的报告,帮他们做更聪明的决…...
【数据结构】AVL树的实现
文章目录 1. AVL 的概念2. AVL 树的实现2.1 AVL 树的结构2.2 AVL 树的插入2.2.1 AVL 树插入一个值的大致过程2.2.2 平衡因子更新 2.3 旋转2.3.1 旋转的原则2.3.2 右单旋2.3.3 左单旋2.3.4 左右双旋2.3.5 右左双选 2.4 AVL 树的查找2.5 AVL 树平衡检测 1. AVL 的概念 AVL树是最…...
基于Zynq SDK的LWIP UDP组播开发实战指南
一、为什么选择LWIP组播? 在工业控制、智能安防、物联网等领域,一对多的高效数据传输需求日益增长。Zynq-7000系列SoC凭借其ARM+FPGA的独特架构,结合LWIP轻量级网络协议栈,成为嵌入式网络开发的理想选择。本文将带您实现: LWIP组播配置全流程动态组播组切换技术零拷贝数据…...
【esp32 控制台】-命令
文章目录 1 esp32控制台简介2 控制台命令编程2.1 控制台配置交互设备初始化控制台初始化等待命令输入 2.2 命令实现2.2.1 命令注册 踩坑记录 1 esp32控制台简介 可以通过idf.py monitor调出idf的控制台,结束控制台用ctrl ]。 esp32的控制台就像linux中的shell一样…...
DApp开发全流程解析:模式设计、功能参考与合约管理实践
DApp开发全流程解析:模式设计、功能参考与合约管理实践 引言:Web3.0时代的DApp开发范式 随着区块链技术的成熟,DApp(去中心化应用)已成为Web3.0生态的核心载体。截至2025年,全球DApp数量突破10万…...
I/O多路复用:poll与epoll
一、select/poll与epoll对比 核心区别 特性select/pollepoll内核数据结构数组(线性结构)红黑树(存储监听的fd)内存拷贝每次调用需将fd列表从用户态拷贝到内核态仅在注册fd时拷贝一次(epoll_ctl)内核事件检…...
【调制识别】PGD攻击中参数的含义
在PGD(Projected Gradient Descent)对抗攻击中,代码如下: # 定义PGD对抗样本生成类 class AttackPGD(nn.Module): def __init__(self, model, config):super(AttackPGD, self).__init__()self.model model …...
设备数据看板助力自动化工厂实现生产智能精细化管理
工厂数字化转型需要实现自动化设备生产现场可视化、设备系统间的互联互通,以及数据的智能决策。然而,当前许多制造企业仍面临着传统单机设备同质化严重、数字化服务能力不足、售后成本高企、系统集成效率低下等挑战。企业如何通过自动化装备看板和实时数…...
单点登录是是什么?具体流程是什么?
SSO⼀般都需要⼀个独⽴的认证中⼼(passport),⼦系统的登录均得通过passport,⼦系统本⾝将不参与登录操作,当⼀个系统成功登录以后,passport将会颁发⼀个令牌给各个⼦系统,⼦系统可以拿着令牌会获…...
什么业务需要用到waf
Web应用防火墙(Web Application Firewall,简称WAF)主要用于保护Web应用程序免受各种网络攻击,以下是需要用到WAF的业务类型及具体场景: 一、电子商务业务 业务特点:涉及用户注册、登录、支付等敏感操作&a…...
java中的Servlet4.x详解
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 Servlet 4.x 是 Java EE 8(现 Jakarta EE)规范的一部分,于 2017 年正式发布。作为 Servlet 技术的重大更…...
## Docker 中 Elasticsearch 启动失败:日志文件权限问题排查与解决
好的,这是一份关于你遇到的 Docker Elasticsearch 启动报错问题的笔记,包含问题描述、我的分析判断以及最终的解决方案,适合用于整理成文章。 Docker 中 Elasticsearch 启动失败:日志文件权限问题排查与解决 在使用 Docker部署 E…...
JavaScript:PC端特效--缓动动画
一、缓动效果原理 缓动动画就是让元素运动速度有所变化,最常见的就是让元素慢慢停下来 思路: 让盒子每次移动的距离慢慢变小,速度就会慢慢降下来核心算法:(目标值-现在位置)/10作为每次移动距离的步长停…...
【深度学习新浪潮】什么是多模态大模型?
多模态大模型是人工智能领域的前沿技术方向,它融合了多种数据模态(如文本、图像、语音、视频、传感器数据等),并通过大规模参数模型实现跨模态的联合理解与生成。简单来说,这类模型就像人类一样,能同时“看”“听”“读”“说”,并将不同信息关联起来,完成复杂任务。 …...
C++23 std::mdspan:多维数组处理新利器
文章目录 引言C23简介std::mdspan的定义与特点定义特点 std::mdspan的优势零成本抽象的多维数据访问减少内存开销提高代码灵活性 std::mdspan的应用场景科学计算图形学 相关提案示例代码使用动态扩展使用静态和动态扩展 总结 引言 在C的发展历程中,每一个新版本都带…...
09、底层注解-@Import导入组件
09、底层注解-Import导入组件 Import是Spring框架中的一个注解,用于将组件导入到Spring的应用上下文中。以下是Import注解的详细介绍: #### 基本用法 - **导入配置类** java Configuration public class MainConfig { // 配置内容 } Configuration Impo…...
码蹄集——N是什么、棋盘
MT1223 N是什么 给定一系列数字3、10、21、36…,输入正整数N,输出上述序列的第N个值。从N1开始计数。 格式 输入格式:输入正整数N 输出格式:输出整型 样例 1 输入:5 输出:55 备注:N小于…...
C++中聚合类(Aggregate Class)知识详解和注意事项
一、聚合类(Aggregate Class)概念 聚合(Aggregate) 是 C 中一类特殊的类类型,无用户自定义构造函数、无私有或受保护非静态数据成员、无虚函数、无基类(C11 起基类必须也是聚合且无私有/受保护成员&#x…...
python打卡day30
模块和库的导入 知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 作业:自己新建几个不同路径文件尝试下如何导入 python的学习就像…...
PostGIS实现栅格数据导出图片标准格式【ST_AsGDALRaster】
ST_AsGDALRaster 函数应用详解:将栅格数据导出为标准图片格式 [文章目录] 一、函数概述 二、函数参数详解 三、关键功能示例 四、GDAL 选项配置指南 五、性能优化建议 六、注意事项与限制 七、应用场景 八、总结 一、函数概述 ST_AsGDALRaster是PostGIS中…...
4.6 sys模块
sys --- 仅作了解 面试之前冲击一下 python的垃圾回收机制 import sys # 1. api_version : 获取python的内部版本号 print(sys.api_version) #1013 # 2. copyright: 获取cpython的版本 print(sys.copyright) #3.getfilesystemencoding() getdefaultencoding():获…...
「HHT(希尔伯特黄变换)——ECG信号处理-第十三课」2025年5月19日
一、引言 心电信号(ECG)是反映心脏电活动的重要生理信号,其特征提取对于心脏疾病的诊断和监测具有关键意义。Hilbert - Huang Transform(HHT)作为一种强大的信号处理工具,在心电信号特征提取领域得到了广泛…...
枪机定焦系统的自动控制装置
枪机定焦系统,作为一种监控设备,通常被广泛应用于各种需要高清、远距离监控的场合。该系统的主要特点是其镜头焦距固定,不能手动或自动调节,从而确保了监控画面的稳定性和清晰度。当提到枪机定焦系统采用自动功能时,可…...
【Unity】Unity中将字典序列化
Unity中将字典序列化,在预制体上能够看到字典的内容,也可以直接在预制体上拖拽给字典赋值 直接上代码 using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine;public class SerializableD…...
VTK|箱体切割器
文章目录 效果实现类头文件实现类源文件如何调用项目git链接 效果 实现类头文件 /*** file BoxClipperController.h* brief 该头文件定义了 BoxClipperController 类,用于管理基于盒子的网格数据裁剪操作。* details 该类提供了使用 vtkBoxWidget 对网格数据进行裁…...
CS50x 01 c
1 getchar() 在 C 语言里,getchar()是一个十分常用的函数,其功能是从标准输入(一般指键盘)读取单个字符。下面为你详细介绍它的用法。 基本语法 getchar()函数的原型定义在<stdio.h>头文件中,语法形式如下&am…...