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

C#中的Array数组,List集合和ArrayList集合--07

目录

一.Array数组概念的简单理解

1.数组的初始化

2.数组的长度

3.数组的克隆和复制

4.数组的清空

5.数组的查找

6.数组的逆转

7.数组的拓展和缩减

 8.数组的比较

9.数组的合并

10.使用Array类中的静态方法,如Array.Sort,Array.BinarySearch 等

二.Array数组进阶

1.二维数组

2.多维数组

 3.交错数组

4.隐式类型数组

三.List集合

1.基本概念

2.声明和初始化

 3.List集合中的常用方法

四.ArrayList集合

1.基本概念:

2.声明和初始化

3.ArrayList中的常用方法

五.总结

Array(数组)

List

ArrayList

三者之间的异同


一.Array数组概念的简单理解

1.数组的初始化

在C#中,可以在声明数组时同时进行初始化.

数组是一种基本的数据结构,用于存储固定大小的同类型元素集合

创建数组的一般格式:  数组类型[] 数组名称=new数组类型[数组长度]

以下是常见的几种方式

代码示例:

// 一维数组初始化   
int[] numbers = new int[] { 1, 2, 3, 4, 5 };// 简化的语法   
int[] numbers2 = { 1, 2, 3, 4, 5 };// 多维数组初始化   
int[,] matrix = new int[,] { { 1, 2 }, { 3, 4 } };// 交错数组初始化   
int[][] jaggedArray = new int[][]    
{new int[] { 1, 2 },new int[] { 3, 4, 5 }   
};

在完成数组的创建后 ,可以根据数组的索引进行初始化,赋值,访问等操作

注意:数组的索引从0作为起始,以数组的长度减一作为终止

假设一个数组的长度为5

//假设一个数组的长度为5
//int[] arr = new int[5] { 1, 2, 3, 4, 5 };
int[] arr = { 1, 2, 3, 4, 5 };
//数组元素: 1 2 3 4 5
//数组索引: 0 1 2 3 4
Console.WriteLine(arr.Length); //通过Length属性获取数组的长度
Console.WriteLine(arr[3]); // 输出索引为3的元素(输出4)
arr[3]= 100; //修改数组索引为3的元素为100
//数组元素: 1 2 3 100 5
//数组索引: 0 1 2 3   4
Console.WriteLine(arr[3]);// 输出索引为3的元素(输出100)
//Console.WriteLine(arr[5]);  //索引越界,如果强行进行编译,会报如下错误:
//Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.

2.数组的长度

在数组中,Length属性可以获取数组的长度(即数组的元素)

代码示例:

int[] numbers = { 1, 2, 3, 4, 5 };   
int length = numbers.Length; // length = 5

3.数组的克隆和复制

在数组中,可以使用Clone方法和Array.Copy方法来复制数组

代码示例:

int[] original = { 1, 2, 3, 4, 5 };// 使用 Clone 方法   
int[] clone = (int[])original.Clone();// 使用 Array.Copy 方法   
int[] copy = new int[original.Length];   
Array.Copy(original, copy, original.Length);

4.数组的清空

Array.Clear方法可以将数组中所有的元素设置为默认值(比如int类型的默认值是0)

代码示例:

int[] numbers = { 1, 2, 3, 4, 5 };
Array.Clear(numbers, 0, numbers.Length); // 数组中的所有元素将变为0

5.数组的查找

在C#的数组中可以使用Array.IndexOf和Array.Find等方法去查找特定的元素

代码示例:

int[] numbers = { 1, 2, 3, 4, 5 };// 使用 Array.IndexOf   
int index = Array.IndexOf(numbers, 3); // index = 2// 使用 Array.Find
int number = Array.Find(numbers, n => n > 3); // number = 4   

6.数组的逆转

Array.Reverse方法可以翻转数组中的元素顺序

代码示例:

int[] numbers = { 1, 2, 3, 4, 5 };
Array.Reverse(numbers); // numbers = { 5, 4, 3, 2, 1 }   

7.数组的拓展和缩减

在C#中一般来说Array数组的大小是在创建时固定的,一旦定义了数组就不能直接更改.

但是可以去使用Array.Resize方法去调整数组的大小

代码示例:

int[] numbers = { 1, 2, 3, 4, 5 };   
Array.Resize(ref numbers, 3); // numbers = { 1, 2, 3 }
Array.Resize(ref numbers, 7); // numbers = { 1, 2, 3, 0, 0, 0, 0 }   
//需要注意的是当你增加数组大小时,新增加的位置将被初始化为该类型的默认值(对于数值类型是0,对于引用类型是null)。当你减少数组大小时,超出新长度的元素将被丢弃。

 8.数组的比较

为了比较两个数组是否完全相同,可以通过遍历数组元素逐个比较,或者使用SequenceEqual方法来比较两个数组是否相同.

代码示例:

int[] array1 = { 1, 2, 3 };   
int[] array2 = { 1, 2, 3 };// 使用 SequenceEqual 方法(需要 System.Linq 命名空间)   
bool areEqual = array1.SequenceEqual(array2); // areEqual = true   

9.数组的合并

在C#中,我们可以去使用Concat方法去合并两个数组\

代码示例:

int[] array1 = { 1, 2, 3 };   
int[] array2 = { 4, 5, 6 };// 使用 Concat 方法(需要 System.Linq 命名空间)
int[] merged = array1.Concat(array2).ToArray(); // merged = { 1, 2, 3, 4, 5, 6 }   

10.使用Array类中的静态方法,如Array.Sort,Array.BinarySearch 等

代码示例:

int[] numbers = { 3, 1, 4, 5, 2 };// 使用 Array.Sort 方法进行排序
Array.Sort(numbers); // numbers = { 1, 2, 3, 4, 5 }// 使用 Array.BinarySearch 方法进行二分查找(前提是数组已排序)
int index = Array.BinarySearch(numbers, 4); // index = 3

二.Array数组进阶

1.二维数组

二维数组可以看作是数组的数组,即每个元素都是一个数组.例如,一个2行3列的二维数组可以看作是一个包含2个数组的数组,每个数组包含3个元素

二维数组也能够将其理解为多维数组的一种特殊形式,可以看做一个矩阵或者表格,具有行和列

// 声明一个二维数组   
int[,] matrix = new int[2, 3]; // 2行3列// 初始化一个二维数组   
int[,] initializedMatrix = new int[,]   
{{ 1, 2, 3 },{ 4, 5, 6 }
};// 访问二维数组的元素   
int element = initializedMatrix[1, 2]; // 获取第二行第三列的元素,值为6

二维数组的特点:

  • 二维数组是以矩阵形式存储的
  • 元素通过两个索引访问,第一个索引表示行,第二个索引表示列
  • 在内存中是以行优先顺序存储的

2.多维数组

多维数组通常指代维度大于二的数组,可以用于表示更加复杂的数据结构

下面使用三维数组来举例

// 声明一个三维数组   
int[,,] threeDimensional = new int[2, 3, 4]; // 2个2D数组,每个3行4列// 初始化一个三维数组   
int[,,] initializedThreeDimensional = new int[,,]   
{{{ 1, 2, 3, 4 },{ 5, 6, 7, 8 },{ 9, 10, 11, 12 }},{{ 13, 14, 15, 16 },{ 17, 18, 19, 20 },{ 21, 22, 23, 24 }}   
};// 访问三维数组的元素   
int element = initializedThreeDimensional[1, 2, 3]; // 获取第二个2D数组第三行第四列的元素,值为24

多维数组的特点:

  • 支持多个维度,每个维度可以有不同的大小
  • 通过多个索引访问元素,每个索引对应一个维度。

 3.交错数组

交错数组(或锯齿数组)是数组的数组,其中每个子数组的长度可以不同.

代码示例:

// 声明一个交错数组   
int[][] jaggedArray = new int[3][]; // 3个子数组// 为每个子数组分配不同的长度   
jaggedArray[0] = new int[2]; // 第一个子数组有2个元素   
jaggedArray[1] = new int[3]; // 第二个子数组有3个元素   
jaggedArray[2] = new int[4]; // 第三个子数组有4个元素// 初始化交错数组   
int[][] initializedJaggedArray = new int[][]   
{new int[] { 1, 2 },new int[] { 3, 4, 5 },new int[] { 6, 7, 8, 9 }   
};// 访问交错数组的元素   
int element = initializedJaggedArray[1][2]; // 获取第二个子数组的第三个元素,值为5

交错数组的特点:

  • 每个子数组可以有不同的长度
  • 在内存中,子数组是独立的数组,可以分布在不同的位置

4.隐式类型数组

隐式类型化数组利用C#的类型推断功能,由编译器根据数组的初始值推断数组的类型.

代码示例:

// 使用隐式类型化数组   
var numbers = new[] { 1, 2, 3, 4, 5 };// 编译器推断出 numbers 是一个 int[] 类型的数组// 对于复杂类型   
var complexArray = new[]   
{new { Name = "Alice", Age = 30 },new { Name = "Bob", Age = 25 }
};// 编译器推断出 complexArray 是一个匿名类型数组

隐式类型数组的特点:

  • 编译器根据初始值推断数组的类型,要求所有初始值的类型必须兼容
  • 可以提高代码的可读性,尤其是在复杂类型的情况下

三.List集合

在C#中,List<T>是一个非常常用的泛型集合,它提供了动态数组的功能.与普通数组相比,List<T>具有更灵活的大小调整能力,并且提供了许多方便的方法来操作集合中的元素.以下是关于List<T>的详细信息:

1.基本概念

  • 动态大小:List<T>可以根据需要动态调整其大小.你可以添加或移除元素,而不需要手动管理内存.
  • 泛型支持:List<T>是一个泛型集合,这意味着你可以指定元素的类型,这提供了类型安全性和性能优化.

2.声明和初始化

代码示例:

// 声明一个 List<int>   
List<int> numbers = new List<int>();// 初始化一个 List<string> 并添加元素   
List<string> names = new List<string> { "Alice", "Bob", "Charlie" };

 3.List集合中的常用方法

  1. 添加元素
    numbers.Add(10); // 添加单个元素
    numbers.AddRange(new int[] { 20, 30, 40 }); // 添加多个元素
    
  2. 插入元素
    numbers.Insert(1, 15); // 在索引1处插入元素15
    
  3. 删除元素
    numbers.Remove(10); // 移除值为10的元素
    numbers.RemoveAt(0); // 移除索引0处的元素
    numbers.RemoveRange(0, 2); // 移除从索引0开始的两个元素
    
  4. 访问元素
    int firstNumber = numbers[0]; // 访问第一个元素
    
  5. 查找元素
    int index = numbers.IndexOf(30); // 查找值为30的元素的索引
    bool contains = numbers.Contains(20); // 检查是否包含值为20的元素
    
  6. 排序
    numbers.Sort(); // 对列表进行升序排序
    numbers.Reverse(); // 反转列表顺序
    
  7. 清空列表
    numbers.Clear(); // 移除所有元素
    

List泛型集合的特点:

  • 自动扩容:List<T>内部实现为一个数组,当需要增加容量时,会自动创建一个更大的数组,并将旧数组中的元素复制到新数组中.这个过程可能会影响性能,尤其是在频繁添加大量元素时
  • 索引访问:与数组类似,List<T>支持通过索引访问元素,访问速度很快
  • 线程安全:List<T>不是线程安全的.在多线程环境中使用时,需要手动实现同步

List集合的应用场景 :

  • 频繁更改大小的集合:List<T>非常适合需要频繁添加,删除或调整大小的集合
  • 需要类型安全的集合:由于List<T>是泛型的,它可以确保集合中的所有元素都是同一类型

四.ArrayList集合

ArrayList集合:

ArrayList是 C# 中一种非泛型集合类,用于存储元素列表.它在 .NET Framework 1.0 引入,适用于早期不支持泛型的场景.尽管在现代开发中推荐使用泛型集合如List<T>,但了解 ArrayList仍然有助于理解 C# 集合的演变和处理非泛型数据的方式

1.基本概念:

  • 非泛型:ArrayList可以存储任何类型的对象,因为它存储的是object类型.这意味着你可以在同一个 ArrayList中存储不同类型的数据
  • 动态大小:与List<T>类似,ArrayList可以根据需要自动调整其大小。

2.声明和初始化

代码示例:

// 声明一个 ArrayList   
ArrayList arrayList = new ArrayList();// 初始化并添加元素   
ArrayList mixedList = new ArrayList() { 1, "hello", 3.14, true };

3.ArrayList中的常用方法

  1. 添加元素
    arrayList.Add(10); // 添加单个元素
    arrayList.AddRange(new object[] { "world", 20.5 }); // 添加多个元素
    
  2. 插入元素
    arrayList.Insert(1, "inserted"); // 在索引1处插入元素
    
  3. 删除元素
    arrayList.Remove(10); // 移除指定值的元素
    arrayList.RemoveAt(0); // 移除索引0处的元素
    arrayList.RemoveRange(0, 2); // 移除从索引0开始的两个元素
    
  4. 访问元素
    var firstElement = arrayList[0]; // 访问第一个元素
    
  5. 查找元素
    int index = arrayList.IndexOf("hello"); // 查找元素的索引
    bool contains = arrayList.Contains(3.14); // 检查是否包含某个元素
    
  6. 排序
    arrayList.Sort(); // 对列表进行排序
    
  7. 清空列表
    arrayList.Clear(); // 移除所有元素
    

性能和使用注意:

  • 装箱和拆箱:由于ArrayList存储的是object类型,对于值类型(如int和double),会发生装箱和拆箱操作,可能影响性能
  • 类型安全性:ArrayList不提供编译时类型检查,可能导致运行时错误.例如,尝试将不兼容的类型转换为特定类型时
  • 线程安全:ArrayList不是线程安全的.在多线程环境中使用时,需要手动实现同步

应用场景:

  • 早期代码:在泛型引入之前的旧代码中经常使用ArrayList
  • 需要存储不同类型的集合:在某些情况下,可能需要在同一集合中存储不同类型的对象

五.总结

Array(数组)

特点

固定大小:数组一旦创建,其大小是固定的,不能动态调整。

类型安全:数组是强类型的,定义时需要指定元素类型,所有元素必须是同一类型。

高效访问:由于数组在内存中是连续存储的,访问速度非常快。

优点

性能高:由于连续内存分配和类型安全,数组的访问和遍历速度较快。

简单直接:适合用于已知大小和类型的集合。

缺点

大小固定:不能动态调整大小,需要预先定义。

功能有限:没有提供丰富的集合操作方法。

用法:

int[] numbers = new int[5]; // 创建一个长度为5的整数数组   
numbers[0] = 10; // 设置元素   
int first = numbers[0]; // 访问元素

List<T>

特点

动态大小:List<T>可以根据需要动态调整大小。

泛型支持:提供类型安全,所有元素必须是同一类型。

丰富的方法:提供了许多用于操作集合的内置方法,如添加、插入、删除、排序等。

优点

灵活性高:能够处理动态变化的集合大小。

类型安全:通过泛型提供编译时类型检查。

缺点

性能开销:在需要扩容时,会有一定的性能开销,因为需要分配新数组并复制元素。

用法:

List<int> numbers = new List<int>();   
numbers.Add(10); // 添加元素   
int first = numbers[0]; // 访问元素

ArrayList

特点

动态大小:ArrayList也可以根据需要动态调整大小。

非泛型:可以存储不同类型的对象,因为它存储的是object类型。

较旧的集合类型:在 .NET 1.0 时代引入,在泛型出现之前广泛使用。

优点

灵活性高:可以存储不同类型的对象。

动态调整大小:能够处理动态变化的集合大小。

缺点

类型不安全:没有编译时类型检查,可能导致运行时错误。

性能问题:由于装箱和拆箱操作,性能可能较低。

用法:

ArrayList arrayList = new ArrayList();   
arrayList.Add(10); // 添加元素   
arrayList.Add("string"); // 添加不同类型的元素   
object first = arrayList[0]; // 访问元素

三者之间的异同

  • 类型安全性:Array和List<T>提供类型安全,而ArrayList不提供。
  • 大小调整:Array大小固定,List<T>和 ArrayList大小可动态调整。
  • 性能:Array通常性能最好,List<T>次之,ArrayList由于装箱和拆箱可能性能最差。
  • 使用场景:Array适合固定大小的集合,List<T>适合动态大小且类型一致的集合,ArrayList适合需要存储不同类型对象的旧代码。

相关文章:

C#中的Array数组,List集合和ArrayList集合--07

目录 一.Array数组概念的简单理解 1.数组的初始化 2.数组的长度 3.数组的克隆和复制 4.数组的清空 5.数组的查找 6.数组的逆转 7.数组的拓展和缩减 8.数组的比较 9.数组的合并 10.使用Array类中的静态方法,如Array.Sort,Array.BinarySearch 等 二.Array数组进阶 1.二…...

基于深度学习的视觉检测小项目(十三) 资源文件的生成和调用

在使用 PySide6 进行开发时&#xff0c;管理应用程序的资源&#xff08;如图标、图片、字体、样式表、音视频等&#xff09;是一个常见的任务。PySide6 提供了一个工具 pyside6-rcc&#xff0c;它能够将资源文件&#xff08;.qrc&#xff09;编译成 Python 模块&#xff0c;然后…...

硬件实用技巧:TPS54331DR横杠标识识别1引脚

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/145116969 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…...

《C++11》nullptr介绍:从NULL说起

在C11之前&#xff0c;我们通常使用NULL来表示空指针。然而&#xff0c;NULL在C中有一些问题和限制&#xff0c;这就是C11引入nullptr的原因。本文将详细介绍nullptr的定义、用法和优点。 1. NULL的问题 在C中&#xff0c;NULL实际上是一个整数0&#xff0c;而不是一个真正的…...

自然语言处理基础:全面概述

自然语言处理基础&#xff1a;全面概述 什么是NLP及其重要性、NLP的核心组件、NLU与NLG、NLU与NLG的集成、NLP的挑战以及NLP的未来 自然语言处理&#xff08;NLP&#xff09;是人工智能&#xff08;AI&#xff09;中最引人入胜且具有影响力的领域之一。它驱动着我们日常使用的…...

网络安全的几种攻击方法

攻击方法 挂马: 就是在别人的网站文件里面放入网页木马或者是将代码潜入到对方正常的网页文件里&#xff0c;以使浏览者中马。 挖洞: 指漏洞挖掘。 加壳: 就是利用特殊的算法&#xff0c;将EXE可执行程序或者DLL动态连接库文件的编码进行改变&#xff08;比如实现压缩、加密&a…...

国内源快速在线安装qt5.15以上版本。(10min安装好)(图文教程)

参考文章&#xff1a;Qt6安装教程——国内源-CSDN博客 1、在国内源上下载qt在线安装工具 NJU Mirror 2、 将下载好的在线安装工具&#xff0c;放到C盘根目录&#xff0c; 2.1 打开windows Powershell&#xff08;WinX&#xff09;&#xff0c;下边那个最好。 输入两条指令&a…...

【pycharm发现找不到python打包工具,且无法下载】

发现找不到python打包工具,且无法下载 解决方法&#xff1a; 第一步&#xff1a;安装distutils&#xff0c;在CMD命令行输入&#xff1a; python -m ensurepip --default-pip第二步&#xff1a;检查和安装setuptools和wheel&#xff1a; python -m pip install --upgrade …...

C++ QT 自绘表盘

文章目录 效果图代码 效果图 代码 代码没什么好说的&#xff0c;直接上源码.h #pragma once#include <QWidget> #include <QPainter> #include <QResizeEvent> #include <QtMath> #include <QCoreApplication>class DialPlateWidget : public …...

数据科学与数据工程:两者的区别与交集

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…...

MAC AndroidStudio模拟器无网络

先确认PC端是正常访问网络的&#xff1b; 模拟器端修改Wifi设置&#xff1a;设置 - 网络和互联网 - WALN设置 按照上图修改&#xff1b; IP设置&#xff1a;从DHCP修改为静态&#xff0c;IP地址&#xff1a;10.0.2.16 &#xff0c;网关&#xff1a;10.0.2.2 &#xff0c; DNS…...

PHP语言的多线程编程

PHP语言的多线程编程 引言 在现代Web开发中&#xff0c;PHP以其简洁和易用性广受欢迎。它常用于构建动态网站和应用程序。然而&#xff0c;PHP本身是单线程的&#xff0c;这意味着它在处理多个任务时可能会受到性能限制。随着互联网的发展&#xff0c;对高并发、高可用性和实…...

当自动包布机遇上Profinet转ModbusTCP网关,“妙啊”,工业智能“前景无限

在自动化控制技术日新月异的当下&#xff0c;Profinet与ModbusTCP这两种协议在工业通信领域占据着举足轻重的地位。ModbusTCP是基于以太网的串行通信协议&#xff0c;而Profinet则是依托工业以太网的现场总线协议。它们在数据传输速度、实时性表现以及兼容性等方面各具特色。不…...

浅析大语言模型安全和隐私保护国内外标准和政策

过去两年&#xff0c;大模型技术已经普及并逐步渗透到各行各业&#xff0c;2025年注定是大模型应用井喷式发展的一年&#xff0c;AI在快速发展的同时&#xff0c;其带来的安全风险也逐渐凸显。人工智能系统的安全性和隐私保护已经成为社会关注的重点。 附下载&#xff1a;600多…...

OpenCV相机标定与3D重建(54)解决透视 n 点问题(Perspective-n-Point, PnP)函数solvePnP()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 根据3D-2D点对应关系找到物体的姿态。 cv::solvePnP 是 OpenCV 库中的一个函数&#xff0c;用于解决透视 n 点问题&#xff08;Perspective-n-Po…...

Chatper 4: Implementing a GPT model from Scratch To Generate Text

文章目录 4 Implementing a GPT model from Scratch To Generate Text4.1 Coding an LLM architecture4.2 Normalizing activations with layer normalization4.3 Implementing a feed forward network with GELU activations4.4 Adding shortcut connections4.5 Connecting at…...

spring-mvc源码分析v3.3.0

分析下springboot内嵌tomcat启动流程&#xff0c;即springboot-mvc <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>3.3.0</version> </dependency>环境…...

Rust实现智能助手 - 项目初始化

文章目录 前言环境准备依赖代码运行使用最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;最近准备花一些时间来使用Rust语言实现一个智能助手&#xff0c;希望能够帮助到你。 环境准备 安装Rust语言环境&#xff0c;你可以从官网下载安装包安装。安装Ollama&#xff0c;…...

sparkSQL练习

1.前期准备 &#xff08;1&#xff09;建议先把这两篇文章都看一下吧&#xff0c;然后把这个项目也搞下来 &#xff08;2&#xff09;看看这个任务 &#xff08;3&#xff09;score.txt student_id,course_code,score 108,3-105,99 105,3-105,88 107,3-105,77 105,3-245,87 1…...

QT跨平台应用程序开发框架(2)—— 初识QT

目录 一&#xff0c;创建helloworld 1.1 通过图形化 1.2 通过代码 1.3 通过编辑框 1.4 使用按钮 二&#xff0c;对象树 2.1 关于对象树 2.2 演示释放流程 三&#xff0c;乱码问题 3.1 为什么会有乱码问题 3.2 解决乱码问题 四&#xff0c;认识Qt坐标系 五&#xf…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...