C#核心学习(三)常见的泛型数据结构类(1)List和Dictionary
前面我们刚刚学习了,什么是泛型。今天我们就来看看C#中有哪些,常见的泛型数据结构,今天要介绍的是List,和Dictionary。
引言
在C#编程中,泛型集合是高效管理数据的核心工具。List<T>
和Dictionary<TKey, TValue>
作为两种最常用的泛型数据结构,分别解决了动态数组管理和键值对快速查找的核心需求。List<T>
以动态扩容和有序存储为特点,支持灵活的索引操作和批量处理;Dictionary<TKey, TValue>
则基于哈希表实现,通过唯一键实现近乎瞬时的数据检索。理解它们的特性、方法及适用场景,是提升代码性能和可维护性的关键。本文将系统解析这两种集合的核心功能、API及实践技巧,帮助开发者合理选择工具,优化数据处理逻辑。
1. List<T>(动态数组)
前面我们有了静态数组,还有一个可以自动扩容的数组ArrayList,今天我们学习一个更加泛华的动态数组
List是一个C#为我们封装好的类
它的本质是一个可变类型的泛型数组
List类帮助我们实现了很多方法
比如泛型数组的增删查改
特性
动态大小:自动调整容量以容纳新增元素。
有序集合:元素按插入顺序存储,支持索引访问(如
list[0]
)。允许重复元素。
基于数组实现:支持快速随机访问(时间复杂度为 O(1))。
申明一个List出来:
注意:需要引入命名空间:using System.Collections.Generic;
// 空列表
List<int> numbers = new List<int>();
List<string> names = new List<string>();// 带初始容量(优化性能)
List<double> values = new List<double>(100);// 初始化时添加元素
List<char> chars = new List<char> { 'a', 'b', 'c' };
常用方法
添加元素:
list.Add(item); // 添加到末尾
list.Insert(index, item); // 插入到指定位置
增加也可以添加一个列表进去:利用AddRange
List<string> liststr = new List<string>();
list2.AddRange(liststr);
删除元素:
list.Remove(item); // 删除第一个匹配项
list.RemoveAt(index); // 删除指定索引的元素
list.Clear(); // 清空所有元素
查找元素:
bool exists = list.Contains(item); // 检查是否存在
int index = list.IndexOf(item); // 获取元素索引
关于查找:
查找索引:
IndexOf(T item)
返回第一个匹配项的索引,未找到返回 -1
。
int index = list.IndexOf("apple");
LastIndexOf(T item)
返回最后一个匹配项的索引。
int lastIndex = list.LastIndexOf("apple");
FindIndex(Predicate<T> match)
根据条件查找第一个匹配项的索引。
int index = list.FindIndex(x => x.StartsWith("A"));
FindLastIndex(Predicate<T> match)
根据条件查找最后一个匹配项的索引。
int lastIndex = list.FindLastIndex(x => x > 100);
BinarySearch(T item)
使用二分查找(要求列表已排序),返回索引或负数(未找到)。
list.Sort();
int index = list.BinarySearch("apple");
Exists(Predicate<T> match)
检查是否存在符合条件的元素。
bool exists = list.Exists(x => x == 42);
容量管理:
list.Capacity = 100; // 预分配容量(减少扩容次数)
遍历相关:
使用迭代器(foreach
):
foreach (int num in numbers)
{Console.WriteLine(num);
}
不使用迭代器(for
循环):
for (int i = 0; i < numbers.Count; i++)
{Console.WriteLine(numbers[i]);
}
性能
添加/删除末尾元素:均摊 O(1)(自动扩容时可能需要复制数组)。
插入/删除中间元素:O(n)(需移动后续元素)。
查找元素:O(n)(需要遍历)。
注意事项
预分配容量:若已知元素数量,初始化时指定容量(如
new List<int>(100)
)可减少扩容开销。避免频繁中间操作:频繁插入或删除中间元素时,性能较差。
2. Dictionary<TKey, TValue>(哈希表)
字典,也称哈希表。就是存储着一对一对的值,和先前我们学习的普通哈希表差不多,只是可以自己定义类型
可以将Dictionary看作是一个键值对的集合,拥有泛型的HashTable
他也是基于键的哈希代码组织起来的键值对
键值对类型从HashTable的object变为了可以自己制定的泛型
特性
键值对存储:每个键唯一对应一个值。
无序集合:元素的顺序不固定(但遍历时顺序一致)。
基于哈希表实现:通过哈希函数快速定位键。
键不可重复:添加重复键会抛出异常。
申明一个字典出来:
注意:需要引用System.Collections.Generic
// 空字典
Dictionary<int, string> idToName = new Dictionary<int, string>();
Dictionary<string, float> productPrices = new Dictionary<string, float>();// 初始化时添加键值对
Dictionary<string, int> wordCounts = new Dictionary<string, int>
{{"apple", 5},{"banana", 3}
};
常用方法
添加/更新键值对:
dict.Add(key, value); // 添加(键必须唯一)
dict[key] = value; // 添加或覆盖
删除键值对:
注意:删除键值对,只用删除键即可
dict.Remove(key);
查找操作:
bool hasKey = dict.ContainsKey(key); // 检查键是否存在
bool hasValue = dict.ContainsValue(100);//检查是否值存在
bool success = dict.TryGetValue(key, out value); // 安全获取值
if (dict.TryGetValue("apple", out int count)) { /* ... */ }
遍历相关;
使用迭代器(遍历键值对):
foreach (KeyValuePair<string, int> pair in wordCounts)
{Console.WriteLine($"Key: {pair.Key}, Value: {pair.Value}");
}
遍历键或值:
这里当你不确定类型的时候,建议使用var代替,系统自动判别
foreach (string key in wordCounts.Keys)
{Console.WriteLine(key);
}foreach (int value in wordCounts.Values)
{Console.WriteLine(value);
}
不使用迭代器(通过集合转换):
var keys = wordCounts.Keys.ToList();
for (int i = 0; i < keys.Count; i++)
{string key = keys[i];Console.WriteLine(key);
}
性能
添加/删除/查找:平均 O(1)(哈希冲突时可能退化为 O(n))。
哈希函数质量:键的
GetHashCode()
应均匀分布以减少冲突。注意事项
键的不可变性:若键是可变对象(如自定义类),修改后会导致哈希值变化,无法定位原有值。
自定义键类型:需正确实现
GetHashCode()
和Equals()
方法。线程不安全:多线程操作需同步。
3. List vs Dictionary 对比
特性 | List<T> | Dictionary<TKey, TValue> |
---|---|---|
存储方式 | 有序元素集合 | 键值对(键唯一) |
查找性能 | O(n)(线性遍历) | O(1)(哈希查找) |
插入/删除性能 | 末尾操作:O(1);中间操作:O(n) | 平均 O(1) |
适用场景 | 需要顺序访问或索引操作 | 快速通过键查找值 |
4、总结
List<T> 的API及属性
类别 | 方法/属性 | 说明 | 返回值/示例 |
---|---|---|---|
声明与初始化 | List<T>() | 创建空列表 | List<int> list = new List<int>(); |
List<T>(int capacity) | 创建具有初始容量的列表 | List<string> list = new List<string>(100); | |
添加元素 | Add(T item) | 添加元素到列表末尾 | list.Add(10); |
Insert(int index, T item) | 在指定索引插入元素 | list.Insert(0, "A"); | |
删除元素 | Remove(T item) | 删除第一个匹配的元素 | list.Remove("apple"); |
RemoveAt(int index) | 删除指定索引的元素 | list.RemoveAt(0); | |
Clear() | 清空列表 | list.Clear(); | |
查找索引 | IndexOf(T item) | 返回第一个匹配项的索引(未找到返回-1) | int index = list.IndexOf(5); |
LastIndexOf(T item) | 返回最后一个匹配项的索引 | int lastIndex = list.LastIndexOf(5); | |
FindIndex(Predicate<T> match) | 返回第一个符合条件的元素的索引 | int index = list.FindIndex(x => x > 10); | |
FindLastIndex(Predicate<T> match) | 返回最后一个符合条件的元素的索引 | int lastIndex = list.FindLastIndex(...); | |
其他操作 | Sort() | 对列表排序(默认升序) | list.Sort(); |
BinarySearch(T item) | 二分查找(列表需已排序) | int pos = list.BinarySearch(5); | |
Exists(Predicate<T> match) | 检查是否存在符合条件的元素 | bool exists = list.Exists(x => x == 0); | |
属性 | Count | 列表中的元素数量 | int count = list.Count; |
Capacity | 列表的当前容量(可手动设置优化性能) | list.Capacity = 100; |
类别 | 方法/属性 | 说明 | 示例 |
---|---|---|---|
添加元素 | AddRange(IEnumerable<T> collection) | 批量添加集合元素到末尾 | list.AddRange(new[] { 4, 5, 6 }); |
插入元素 | InsertRange(int index, IEnumerable<T> collection) | 在指定位置插入集合元素 | list.InsertRange(0, new[] { -1, 0 }); |
删除元素 | RemoveRange(int index, int count) | 删除从索引 index 开始的 count 个元素 | list.RemoveRange(2, 3); |
获取子集 | GetRange(int index, int count) | 返回从索引 index 开始的 count 个元素的子列表(浅拷贝) | var sub = list.GetRange(1, 2); |
排序与反转 | Reverse(int index, int count) | 反转指定范围的元素顺序 | list.Reverse(0, 3); |
Dictionary<TKey, TValue> 的API及属性
类别 | 方法/属性 | 说明 | 返回值/示例 |
---|---|---|---|
声明与初始化 | Dictionary<TKey, TValue>() | 创建空字典 | Dictionary<int, string> dict = new ...; |
添加/更新 | Add(TKey key, TValue value) | 添加键值对(键必须唯一,否则抛出异常) | dict.Add(1, "A"); |
dict[key] = value | 添加或更新键对应的值 | dict[2] = "B"; | |
删除元素 | Remove(TKey key) | 删除指定键的键值对 | dict.Remove(1); |
Clear() | 清空字典 | dict.Clear(); | |
查找操作 | ContainsKey(TKey key) | 检查键是否存在 | bool exists = dict.ContainsKey(1); |
TryGetValue(TKey key, out TValue value) | 安全获取值(避免重复哈希计算) | if (dict.TryGetValue(1, out string val)) | |
ContainsValue(TValue value) | 检查值是否存在(时间复杂度O(n)) | bool hasVal = dict.ContainsValue("A"); | |
属性 | Keys | 获取所有键的集合 | foreach (var key in dict.Keys) { ... } |
Values | 获取所有值的集合 | foreach (var val in dict.Values) { ... } | |
Count | 字典中键值对的数量 | int count = dict.Count; | |
其他方法 | ElementAt(int index) (需Linq) | 按插入顺序获取指定位置的键值对(性能较差) | var pair = dict.ElementAt(0); |
差不多常用的就这些了,你如果还想继续深入了解,可以去看官方文档。
相关文章:
C#核心学习(三)常见的泛型数据结构类(1)List和Dictionary
前面我们刚刚学习了,什么是泛型。今天我们就来看看C#中有哪些,常见的泛型数据结构,今天要介绍的是List,和Dictionary。 引言 在C#编程中,泛型集合是高效管理数据的核心工具。List<T>和Dictionary<TKey, TValue>作为两…...
运行时数据区
运行时数据区 Java 虚拟机在运行 Java 程序过程中管理的内存区域称之为运行时数据区,运行时数据区负责管理 JVM 使用到的内存,例如创建对象和销毁对象。 程序计数器 程序计数器又叫 PC 寄存器,每个线程都会通过程序计数器记录当前要执行的字…...
union all 关联查询
UNION ALL 并非用于表的关联查询,而是用于将多个 SELECT 语句的结果集合并成一个结果集。它会保留所有重复的行,不像 UNION 会去除重复行。下面为你提供几种使用 UNION ALL 的场景示例。 示例表结构 假设存在两个表 sales_2024 和 sales_2025ÿ…...
npm ERR! vue-admin-beautiful@1.0.0 dev: `vue-cli-service serve` 问题解决
笔者在跑实习公司的前端时,老是报这个错,并且网上(csdn)并没有好的解决方法,于是这篇文章就诞生了。[吐槽一下]:小公司的实习生干的活是真的多啊。。。 解决方案 依赖有些包装不上,换个源就行了,这里采用…...
玩转Docker | 使用Docker部署Xnote笔记工具
玩转Docker | 使用Docker部署Xnote笔记工具 前言一、Xnote介绍Xnote简介1.2 Xnote特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署Xnote服务下载镜像编辑配置文件编辑部署文件创建容器检查容器状态检查服务端口安全设置四、访问Xnote服务访问Xnote首页…...
TDengine 与其他时序数据库对比:InfluxDB/TimescaleDB 选型指南(二)
四、应用场景分析 (一)TDengine 适用场景 TDengine 适用于对写入性能和存储效率要求极高的物联网设备数据采集场景。在一个拥有数百万个传感器的智能工厂中,每个传感器每秒都会产生多条数据,TDengine 能够高效地处理这些高并发的…...
ARM Cortex汇编宏定义
在ARM架构(尤其是Cortex-M系列MCU)的汇编中,**宏定义(Macro)**用于复用代码片段,支持参数化编程,简化重复逻辑(如寄存器操作、循环、条件判断等)。以下是ARM汇编宏定义的核心语法、用法及示例: 一、宏定义的基本语法 使用 MACRO 和 MEND 伪指令包裹宏体,通过 参数…...
【含文档+PPT+源码】基于Python心理健康管理系统
项目视频介绍: 毕业作品心理健康管理系统 课程简介: 本课程演示的是一款基于Python心理健康管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含:项目源码、项目文档、数据库脚本、软…...
Dockerfile项目实战-单阶段构建Vue2项目
单阶段构建镜像-Vue2项目 1 项目层级目录 以下是项目的基本目录结构: 2 Node版本 博主的Windows电脑安装了v14.18.3的node.js版本,所以直接使用本机电脑生成项目,然后拷到了 Centos 7 里面 # 查看本机node版本 node -v3 创建Vue2项目 …...
大数据驱动的供应链透明化:从数据孤岛到智能协同
大数据驱动的供应链透明化:从数据孤岛到智能协同 在全球化供应链环境下,透明化不仅是一种企业责任,更是提高效率、降低成本和增强供应链韧性的关键举措。然而,传统供应链体系因数据孤岛、信息滞后、信任缺失等问题,常常导致生产过剩、库存积压、资源浪费,甚至供应链断裂…...
第四篇:[特殊字符] 深入理解MyBatis[特殊字符] 掌握MyBatis Generator ——入门与实战
引言 什么是 MyBatis Generator? MyBatis Generator (MBG) 是一个代码生成工具,专为 MyBatis 框架设计。它可以根据数据库表结构自动生成 Java 实体类、Mapper 接口、Mapper XML 文件以及 Example 类。通过使用 MBG,开发者可以显著减少编写…...
LeetCode算法题(Go语言实现)_48
题目 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回 直到单元格中…...
ESP-ADF外设子系统深度解析:esp_peripherals组件架构与核心设计(核心API详解之单个外设管理)
目录 单个外设管理APIesp_periph_createesp_periph_set_functionesp_periph_startesp_periph_stopesp_periph_set_dataesp_periph_get_dataesp_periph_get_stateesp_periph_get_idesp_periph_set_idesp_periph_initesp_periph_runesp_periph_destroy 单个外设管理API esp_peri…...
基于vue2+ElementUI的el-tree封装一个带搜索的树形组件
需求 实现一个如图带搜索框的下拉树形组件。 解决方案 利用el-inputel-tree实现自定义带搜索的下拉树形组件。 具体实现步骤 1、创建TreeSelect组件 <template><div class"tree-select-wrapper" v-clickoutside"handleClose"><el-inpu…...
G2学习打卡
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 DCGAN实践 import torch, random, random, os import torch.nn as nn import torch.nn.parallel import torch.optim as optim import torch.utils.data im…...
【广州华锐互动】汽车生产引入数字孪生系统,优化生产流程,提升汽车产品质量
数字孪生系统的应用为企业带来了生产流程的革命性变革。以汽车制造企业为例,该企业在生产过程中引入数字孪生系统,实现了生产流程的全面优化和产品质量的显著提升 。 在生产流程优化方面,数字孪生系统对汽车生产线进行了全方位的模拟和实时…...
从Gradio App创建Discord Bot/Slack Bot/Website Widget(2)——从Gradio App创建Slack Bot
从Gradio App创建Discord Bot/Slack Bot/Website Widget(2)——从Gradio App创建Slack Bot 本篇摘要18. 从Gradio App创建Discord Bot/Slack Bot/Website Widget18.2 从Gradio App创建Slack Bot18.2.1 运作原理及前置条件1. 运作原理2. 前置条件 18.2.2 …...
基于STM32G474的SPI获取MT6816编码器绝对角度配置指南
前言:最近上手使用了一款编码器芯片,也是先艰难阅读了一下全英文版本的编码器的规格手册,然后通过SPI读取了一下绝对值角度。虽然发现使用起来还是挺简单的,但使用后还是会产生一个对其原理层面的好奇,比如磁编码器内部…...
深入学习ReentrantLock
ReentrantLock 0. 前言:为什么需要 ReentrantLock?1. 基础概念与核心特性1.1 什么是 ReentrantLock?1.2 ReentrantLock vs. synchronized1.3 核心特性详解1.3.1 可重入性 (Reentrancy)1.3.2 公平性选择 (Fairness Choice)1.3.3 可中断获取锁 …...
Spring Boot 集成金蝶 API 演示
✨ Spring Boot 集成金蝶 API 演示:登录 / 注销 Cookie 保存 本文将通过 Spring Boot 完整实现一套金蝶接口集成模型,包括: ✅ 普通登录✅ AppSecret 登录✅ 注销✅ Cookie 保存与复用 📅 项目结构 src/ ├── controller/ │…...
适用于 HAL 的 AIDL
目录 设计初衷 注意 编写AIDLHAL接口 查找AIDLHAL接口 扩展接口 将现有HAL从HIDL转换为AIDL AIDL与HIDL之间的主要差异 针对HAL的供应商测试套件(VTS)测试 Android 11 中引入了在 Android 中使用 AIDL 实现 HAL 的功能, 从而可以在不使用 HIDL 的情况下实现 Android 的部分…...
49、Spring Boot 详细讲义(六)(SpringBoot2.x整合Mybatis实现CURD操作和分页查询详细项目文档)
项目文档:银行借据信息CURD操作和分页查询 一、项目概述 1. 项目简介 本项目旨在使用Spring Boot框架整合MyBatis连接Mysql数据库实现借据信息的增加、删除、修改和查询功能,同时支持分页查询,并提供对应的Restful风格的接口。 2.环境准备 2.1.工具和软件准备 JDK(建议…...
C# 运行web项目
1、web项目直接点击顶部运行...
GPU服务器声音很响可以怎么处理
当GPU服务器运行时噪音过大,通常是由于高负载下散热风扇高速运转所致。以下是分步骤的解决方案,帮助您有效降低噪音并保持设备稳定运行: 一、排查噪音来源 定位声源 • 使用 声级计 或手机分贝检测APP,确定最大噪音位置࿰…...
Java如何选择ojdbc驱动
如何选择ojdbc驱动? 取决于短板。 如果JDK版本高,数据库版本低,根据Oracle数据库版本选择。如果JDK版本低,数据库版本高,根据Java版本选择。 Oracle官网OJDBC驱动和受支持的JDK版本 23ai 21c 19c 驱动类型选择 oj…...
【微思就业推荐 】T岗位-北京,福州,厦门等地
到微思学习,免费推荐就业!学员内推! 原创 厦门微思网络 2025年04月 有哪些大公司在招OCP认证人才? 有哪些大公司在招聘拥有HCIE认证的人才 ① 委托单位:润欣商业管理(厦门)有限公司 央企-华润资产的子公司 岗位&am…...
Linux 命令全解析:从零开始掌握 Linux 命令行
Linux 作为一款强大的开源操作系统,广泛应用于服务器、嵌入式系统以及超级计算机领域。掌握 Linux 命令行技能,是每一位开发者和系统管理员的必备能力。本文将从基础开始,为你详细介绍常用的 Linux 命令,以及它们的使用场景和示例…...
2025年4月份生活有感
今天在5000B培训的下午,一起入所来的小伙伴,有个申请了深圳大学的博士,已录取。哎,想起了当年申博时候信心和决心不足,导致后面匆匆的拿了offer去工作。看到同事的选择还是非常羡慕,想到自己5月份的婚礼&am…...
鸿蒙系统开发状态更新字段区别对比
在鸿蒙系统开发中,状态管理是构建响应式UI的核心机制,主要通过装饰器(Decorators)实现字段的状态观测与更新。根据鸿蒙的版本(V1稳定版和V2试用版),支持的装饰器及其特性有所不同。以下是主要状…...
CEPH OSD_SLOW_PING_TIME_FRONT/BACK 警告处理
ceph config set mgr mon_warn_on_slow_ping_time 2000说明:mon_warn_on_slow_ping_time 该值默认为0,那么只要 osd 心跳超过 mon_warn_on_slow_ping_ratio of osd_heartbeat_grace. 也就是超过 mon_warn_on_slow_ping_ratio和mon_warn_on_slow_ping_rat…...
HTML应用指南:利用POST请求获取全国小菜园门店位置信息
小菜园作为一家以徽菜为主的快餐品牌,自2013年成立以来,凭借其独特的烹饪理念和精致的东方口味菜品,在中国市场上迅速崛起。该品牌强调少油少盐、减少调味品使用,旨在传承并发扬徽州风味的独特魅力。这种健康且不失美味的烹饪方式…...
Python在去中心化物联网中的应用:数据安全、智能合约与边缘计算的融合
Python在去中心化物联网中的应用:数据安全、智能合约与边缘计算的融合 在万物互联的时代,传统物联网(IoT)架构依赖于集中式服务器来管理数据、设备互联与身份认证。然而,随着设备数量激增,中心化架构的可扩展性、安全性和隐私问题逐渐暴露。去中心化物联网(DeIoT)通过…...
CEPH配置优化建议
一、硬件配置优化 磁盘选择: SSD 与 HDD 搭配:使用 SSD 作为 OSD 日志盘(Journal)或元数据存储,HDD 作为数据盘。推荐 SSD 与 HDD 的比例为 1:3~5,具体根据业务负载调整。 RAID 禁用:避免使用硬…...
深度学习入门:神经网络的学习
目录 1 从数据中学习1.1 数据驱动1.2 训练数据和测试数据 2损失函数2.1 均方误差2.2 交叉熵误差2.3 mini-batch学习2.4 mini-batch版交叉熵误差的实现2.5 为何要设定损失函数 3 数值微分3.1 数值微分3.3 偏导数 4 梯度4.1 梯度法4.2 神经网络的梯度 5 学习算法的实现5.1 2层神经…...
机器学习_决策树
决策树的特点 可以处理非线性的问题可解释强,没有θ模型简单,模型预测效率高 if else不容易显示的使用函数表达,不可微 决策树的生成和预测 生成:通过大量数据生成一颗非常好的树,用这棵树来预测新来的数据。 预测&…...
深入理解UML动态图:系统行为建模全景指南
目录 前言1. 动态图概述2. 用例图(Use Case Diagram)2.1 定义与作用2.2 应用价值2.3 实践建议 3. 顺序图(Sequence Diagram)3.1 定义与特征3.2 应用优势3.3 建模建议 4. 活动图(Activity Diagram)4.1 定义与…...
Linux驱动开发进阶(九)- SPI子系统BSP驱动
文章目录 1、前言2、SPI总线注册3、SPI设备注册4、SPI驱动注册5、SPI BSP驱动 1、前言 学习参考书籍以及本文涉及的示例程序:李山文的《Linux驱动开发进阶》本文属于个人学习后的总结,不太具备教学功能。 2、SPI总线注册 驱动源码文件:dri…...
wabpack学习记录
wabpack学习记录 前言 项目写了不少 对webpack了解甚少 只记住一些 必要的概念以及指令 所以像深究一下具体是什么 可以做什么 如何做等 package.json 文件详解 name: 项目的名称。 version: 项目的版本号。 description: 项目的描述。 author: 项目的作者或维护者信息。 l…...
计算机视觉——基于 Yolov8 目标检测与 OpenCV 光流实现目标追踪
1. 概述 目标检测(Object Detection)和目标追踪(Object Tracking)是计算机视觉中的两个关键技术,它们在多种实际应用场景中发挥着重要作用。 目标检测指的是在静态图像或视频帧中识别出特定类别的目标对象࿰…...
React 更新 state 中的数组
更新 state 中的数组 数组是另外一种可以存储在 state 中的 JavaScript 对象,它虽然是可变的,但是却应该被视为不可变。同对象一样,当你想要更新存储于 state 中的数组时,你需要创建一个新的数组(或者创建一份已有数组…...
[250415] OpenAI 推出 GPT-4.1 系列,支持 1M token
目录 OpenAI 推出 GPT-4.1 系列 OpenAI 推出 GPT-4.1 系列 OpenAI 宣布,新一代 GPT-4.1 模型系列正式发布,包括 GPT-4.1, GPT-4.1 mini 和 GPT-4.1 nano 三款模型,该系列模型在各项性能指标上全面超越 GPT-4o 和 GPT-4o mini,尤其…...
分布式锁+秒杀异步优化
文章目录 问题思路setnx实现锁误删问题和解决方案Redis Lua脚本问题引出解决方案 setnx实现的问题Redission快速入门redission可重入锁原理 秒杀优化(异步优化)异步秒杀思路秒杀资格判断Redis消息队列 问题 比如我们两个机器都部署了我们项目,这里nginx使用轮询的方…...
数据服务化 VS 数据中台:战略演进中的价值重构
在企业数据战略的演进历程中,数据中台曾被视为解决数据孤岛的 “万能钥匙”,而数据服务化的兴起则标志着企业从 “数据资源囤积” 向 “数据价值释放” 的深刻转型。两者的核心差异不仅在于技术架构,更在于对数据资产的定位与使用理念的根本分…...
PL/SQL登录慢,程序连接Oracle 提示无法连接或无监听
PL/SQL登录慢,程序连接Oracle 提示无法连接或无监听 错误提示:ORA-12541: TNS: 无监听程序 的解决办法, 现象:PL/SQL登录慢,程序连接Oracle 提示无法连接或无监听 监听已经正常开起,但还是PL/SQL登录慢或…...
【JAVAFX】自定义FXML 文件存放的位置以及使用
情况 1:FXML 文件与调用类在同一个包中(推荐) 假设类 MainApp 的包是 com.example,且 FXML 文件放在 resources/com/example 下: 项目根目录 ├── src │ └── sample │ └── Main.java ├── src/s…...
DDoS(分布式拒绝服务)攻击
DDoS(分布式拒绝服务)攻击 这是一份全面系统的 DDoS(分布式拒绝服务攻击)知识总结,适合用于学习、报告、讲稿或者面试准备。内容涵盖定义、原理、危害、利用、工具、防护策略等。 一、什么是DDoS DDoS(Distributed Denial of Se…...
scikit-learn初探
KFold k交叉验证,k-1个作为训练集,剩下的作为测试集 split split(X, yNone, groupsNone)X: (n_samples, n_features)的矩阵,行数为n_samples,列数为n_features y:(n_samples,)为列向量,表示监…...
深入解析 sklearn 中的多种特征编码方式:功能、适用场景与选择建议
标题:深入解析 sklearn 中的多种特征编码方式:功能、适用场景与选择建议 摘要: 在机器学习中,特征编码是数据预处理的重要环节,直接影响模型的性能和效果。本文详细介绍了 sklearn 及其生态中(含第三方库…...
windows10 wsl2 安装ubuntu和docker
见 弃用Docker Desktop:在WSL2中玩转Docker之Docker Engine 部署与WSL入门-阿里云开发者社区 如果启动docker时报下面这个错, 那是因为systemctl没有启用 sudo systemctl start docker System has not been booted with systemd as init system (PID 1)…...
一文读懂WPF系列之依赖属性与附加属性
依赖属性与附加属性 依赖属性对比C#属性WPF依赖属性(Dependency Properties)优先级计算与值决策回调与验证机制WPF 自带的依赖属性自定义依赖属性 附加属性本质与定义与依赖属性的区别附加属性的典型应用场景自定义附加属性注意事项 属性…...