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

c#数据结构-列表

列表

数组可以管理大量数组,但缺点是无法更变容量。
创建小了不够用,创建大了浪费空间。
无法预测需要多少大小的时候,可能范围越大,就会浪费越多的空间。

所以,你可能会想要一种可以扩容的东西,代替数组。
列表就能做到这件事。

创建

泛型列表的构造器可以填入一个数组,代表初始长度。
也可以直接传入一个可迭代的东西,据此初始化列表。
也可以什么都不填。

List<int> list1 = new List<int>();
List<int> list2 = new List<int>(10);int[] arr = { 9, 4, 8, 6, 2, 0 };
List<int> list3 = new List<int>(arr);

添加元素

列表使用Add方法添加元素。
在调用构造器时可以使用对象初始化器添加元素。

List<int> list2 = new List<int>() { 6, 9, 8 };list2.Add(0);
list2.Add(2);
list2.Add(9);
list2.Add(6);

使用AddRange可以一次添加一堆元素(参数是一个可迭代类型)

list2.AddRange(arr);

列表还可以从中间插入元素

list2.Insert(6,-1);//将元素-1插入到索引为6的位置。(原本在6的元素会被挤到后面去)
list2.InsertRange(2,arr);//将可迭代类型的值插入到索引为2的位置。(原来在2位置的元素会被挤到后面去)

删除元素

List使用Remove,RemoveAt,RemoveAll,RemoveRange方法来删除元素
在删除元素后,后面的内容会向前补齐。

list2.Remove(0);//遍历元素,直到找到第一个和这个元素相等的元素。移除他。如果真的找到并移除了就返回true
list2.RemoveAt(5);//移除指定索引处的元素
list2.RemoveAll(s=>s>5);//移除所有满足条件的元素
list2.RemoveRange(2,5);//从索引为2的位置开始,连续移除5个元素

访问元素

列表访问元素和数组一样,使用索引器进行访问。
但不能超过元素数量(不是数组长度)。
在构造器填入的数字是初始数组的长度。
列表的原理其实是帮你管理并自动扩容一个数组。

list2[2] = 16;
int i1 = list2[3];

遍历

列表使用Count属性代替数组的Length验证条件。

for (int i = 0; i < list2.Count; i++)
{Console.WriteLine(list2[i]);
}

只有数组才有长度一说,他创建就是以长度为准,不可更改,在内存中以一个整块存在。
这些复杂数据结构只会说元素数量(Count)。因为他们可能是零散的。

设置容量

列表在没包含任何元素时,所有同泛型的列表会共用一个长度为0的数组。
在需要扩容的时候,创建一个容量翻倍(且至少为4)的数组。
意味着如果多次扩容也会有很高的性能损失。
所以建议在创建列表时尽量预判需要的长度。

Console.WriteLine(list2.Capacity);//背后数组的长度,可以获取或设置。但不能设置小于当前元素数量的值
list2.TrimExcess();//如果元素数量小于数组长度的90%,裁剪数组使得和元素数量匹配
list2.Clear();//清空元素。这不会改变后背数组的长度。

方便的方法

List有很多和Linq功能相似的方法,可以直接使用而无需调用Linq。

list2.Sort();//list可以直接调用排序方法,而无需像数组一样使用数组基类调用
list2.Sort((a, b) => b - a);//虽然没有降序方法,但你可以使用委托自定义排序list2.Reverse();//反转整个列表list2.IndexOf(5);//查找和参数相同的第一个元素。并返回他的索引。如果找不到返回-1
list2.FindIndex(s => s > 5);//找到第一个满足条件的元素,返回他的所有,如果没找到返回-1list2.Contains(3);//判断是否存在这样的元素
list2.Find(s=>s>5);//找到第一个满足条件的元素,并返回
list2.FindAll(s => s > 5);//找到所有满足条件的元素,构成一个新的List返回list2.Foreach(s => Console.WriteLine(s++));//遍历所有元素并执行一个委托。
//相较于自己调用foreach循环,区别在于临时变量是可以修改的(不会影响原元素)。
//并且委托的return只是用来结束委托的。而foreach循环中return会结束当前方法。

相关文章:

c#数据结构-列表

列表 数组可以管理大量数组&#xff0c;但缺点是无法更变容量。 创建小了不够用&#xff0c;创建大了浪费空间。 无法预测需要多少大小的时候&#xff0c;可能范围越大&#xff0c;就会浪费越多的空间。 所以&#xff0c;你可能会想要一种可以扩容的东西&#xff0c;代替数组…...

Sa-Token实现分布式登录鉴权(Redis集成 前后端分离)

文章目录1. Sa-Token 介绍2. 登录认证2.1 登录与注销2.2 会话查询2.3 Token 查询3. 权限认证3.1 获取当前账号权限码集合3.2 权限校验3.3 角色校验4. 前后台分离&#xff08;无Cookie模式&#xff09;5. Sa-Token 集成 Redis6. SpringBoot 集成 Sa-Token6.1 创建项目6.2 添加依…...

leaflet显示高程

很多地图软件都能随鼠标移动动态显示高程。这里介绍一种方法&#xff0c;我所得出的。1 下载高程数据一般有12.5m数据下载&#xff0c;可惜精度根本不够&#xff0c;比如mapbox的免费在线的&#xff0c;或者91卫图提供百度网盘打包下载的&#xff0c;没法用&#xff0c;差距太大…...

电子学会2022年12月青少年软件编程(图形化)等级考试试卷(三级)答案解析

目录 一、单选题(共25题&#xff0c;共50分) 二、判断题(共10题&#xff0c;共20分) 三、编程题(共3题&#xff0c;共30分) 青少年软件编程&#xff08;图形化&#xff09;等级考试试卷&#xff08;三级&#xff09; 一、单选题(共25题&#xff0c;共50分) 1. 默认小猫角色…...

ubuntu 驱动更新后导致无法进入界面

**问题描述&#xff1a; **安装新ubuntu系统后未禁止驱动更新导致无法进入登录界面。 解决办法&#xff1a; 首先在进入BIOS中&#xff0c;修改设置以进行命令行操作&#xff0c;然后卸载已有的系统驱动&#xff0c;最后安装新的驱动即可。 开机按F11进入启动菜单栏&#xf…...

解决访问GitHub时出现的“您的连接不是私密连接”的问题!

Content问题描述解决办法问题描述 访问github出现您的连接不是私密连接问题&#xff0c;无法正常访问&#xff0c;如下图所示&#xff1a; 解决办法 修改hosts文件。hosts文件位于&#xff1a;C:\Windows\System32\drivers\etc\hosts 首先在https://www.ipaddress.com/查找两…...

初识数据仓库

一、什么是数据仓库数据库 --> OLTP&#xff1a;&#xff08;on-line transaction processing&#xff09;翻译为联机事务处理记录某类业务事件的发生&#xff0c;如购买行为&#xff0c;银行交易行为&#xff0c;当行为产生后&#xff0c;系统会记录是谁在何时何地做了何事…...

FilenameUtils工具类部分源码自研

FilenameUtils工具类部分源码自研getExtension(orgFileName)源码如下逐行分析getExtension(orgFileName)源码如下 public class FilenameUtils {public static int indexOfExtension(String fileName) throws IllegalArgumentException {if (fileName null) {return -1;} els…...

【前端领域】3D旋转超美相册(HTML+CSS)

世界上总有一半人不理解另一半人的快乐。 ——《爱玛》 目录 一、前言 二、本期作品介绍 3D旋转相册 三、效果展示 四、详细介绍 五、编码实现 index.html style.css img 六、获取源码 公众号获取源码 获取源码&#xff1f;私信&#xff1f;关注&#xff1f;点赞&…...

Java——聊聊JUC中的原子变量类

文章目录&#xff1a; 1.什么是原子变量类&#xff1f; 2.AtomicInteger&#xff08;基本类型原子变量类&#xff09; 3.AtomicIntegerArray&#xff08;数组类型原子变量类&#xff09; 4.AtomicMarkableReference&#xff08;引用类型原子变量类&#xff09; 5.AtomicInteger…...

elasticsearch索引与搜索初步

ES支持cURL交互&#xff0c;使用http请求完成索引和搜索操作&#xff0c;最基本的格式如下&#xff1a;创建索引我们可以使用PUT方法创建索引&#xff0c;通过指定“索引”、“类型”、“文档ID”锁定文档&#xff0c;通过参数指定文档的数据。红色部分的路由分别指定了“索引”…...

【Python】多线程与多进程学习笔记

本文是一篇学习笔记&#xff0c;学习内容主要来源于莫凡python的文档&#xff1a;https://mofanpy.com/tutorials/python-basic/threading/thread 多线程 线程基本结构 开启子线程的简单方式如下&#xff1a; import threadingdef thread_job():print(This is a thread of %…...

MySQL基础知识点

1.在Linux上安装好MySQL8.0之后&#xff0c;默认数据目录的具体位置是什么&#xff1f;该目录下都保存哪些数据库组件&#xff1f;在目录/usr/sbin、/usr/bin、/etc、/var/log 分别保存哪些组件&#xff1f; 答&#xff1a;默认数据目录&#xff1a;/var/lib/mysql。保存有mysq…...

代码随想录算法训练营第五十九天| 583. 两个字符串的删除操作、72. 编辑距离

Leetcode - 583dp[i][j]代表以i-1结尾的words1的子串 要变成以j-1结尾的words2的子串所需要的次数。初始化&#xff1a; "" 变成"" 所需0次 dp[0][0] 0, ""变成words2的子串 需要子串的长度的次数,所以dp[0][j] j, 同理&#xff0c;dp[i][0] …...

指针引用字符串问题(详解)

通过指针引用字符串可以更加方便灵活的使用字符串。 字符串的引用方式有两种&#xff0c;下面简单介绍一下这两种方法。 1.用字符数组来存放一个字符串。 1.1 可以通过数组名和下标来引用字符串中的一个字符。 1.2 还可以通过数组名和格式声明符%s输出整个字符串。 具体实…...

数据结构——哈夫曼树编程,输入权值实现流程图代码

一、须知 本代码是在数据结构——哈夫曼树编程上建立的&#xff0c;使用时需将代码剪切到C等软件中。需要输入权值方可实现流程图&#xff0c;但是还需要按照编程换算出的结果自己用笔画出流程图。 下面将代码粘贴到文章中&#xff0c;同时举一个例子&#xff1a;二、代…...

【MySQL】 事务

&#x1f60a;&#x1f60a;作者简介&#x1f60a;&#x1f60a; &#xff1a; 大家好&#xff0c;我是南瓜籽&#xff0c;一个在校大二学生&#xff0c;我将会持续分享Java相关知识。 &#x1f389;&#x1f389;个人主页&#x1f389;&#x1f389; &#xff1a; 南瓜籽的主页…...

Java测试——selenium常见操作(2)

这篇博客继续讲解一些selenium的常见操作 selenium的下载与准备工作请看之前的博客&#xff1a;Java测试——selenium的安装与使用教程 先创建驱动 ChromeDriver driver new ChromeDriver();等待操作 我们上一篇博客讲到&#xff0c;有些时候代码执行过快&#xff0c;页面…...

【三维点云】01-激光雷达原理与应用

文章目录内容概要1 激光雷达原理1.1 什么是激光雷达&#xff1f;1.2 激光雷达原理1.3 激光雷达分类三角法TOF法脉冲间隔测量法幅度调制的相位测量法相干法激光雷达用途2 激光雷达安装、标定与同步2.1 激光雷达安装方式考虑因素2.2 激光雷达点云用途2.3 数据融合多激光雷达数据融…...

自动驾驶感知——物体检测与跟踪算法|4D毫米波雷达

文章目录1. 物体检测与跟踪算法1.1 DBSCAN1.2 卡尔曼滤波2. 毫米波雷达公开数据库的未来发展方向3. 4D毫米波雷达特点及发展趋势3.1 4D毫米波雷达特点3.1.1 FMCW雷达角度分辨率3.1.2 MIMO ( Multiple Input Multiple Output)技术3.2 4D毫米波雷达发展趋势3.2.1 芯片级联3.2.2 专…...

C语言(内联函数(C99)和_Noreturn)

1.内联函数 通常&#xff0c;函数调用都有一定的开销&#xff0c;因为函数的调用过程包含建立调用&#xff0c;传递参数&#xff0c;跳转到函数代码并返回。而使用宏是代码内联&#xff0c;可以避开这样的开销。 内联函数&#xff1a;使用内联diamagnetic代替函数调用。把函数…...

图卷积神经网络(GCN)理解与tensorflow2.0 代码实现 附完整代码

图(Graph),一般用 $G=(V,E)$ 表示,这里的$V$是图中节点的集合,$E$ 为边的集合,节点的个数用$N$表示。在一个图中,有三个比较重要的矩阵: 特征矩阵$X$:维度为 $N\times D$ ,表示图中有 N 个节点,每个节点的特征个数是 D。邻居矩阵$A$:维度为 $N\times N$ ,表示图中 N…...

模电学习6. 常用的三极管放大电路

模电学习6. 常用的三极管放大电路一、判断三极管的工作状态1. 正偏与反偏的概念2. 工作状态的简单判断二、三种重要的放大电路1. 共射电路2. 共集电极放大电路3. 共基极放大电路一、判断三极管的工作状态 1. 正偏与反偏的概念 晶体管分P区和N区&#xff0c; 当P区电压大于N区…...

Lesson 6.6 多分类评估指标的 macro 和 weighted 过程 Lesson 6.7 GridSearchCV 的进阶使用方法

文章目录一、多分类评估指标的 macro 和 weighted 过程1. 多分类 F1-Score 评估指标2. 多分类 ROC-AUC 评估指标二、借助机器学习流构建全域参数搜索空间三、优化评估指标选取1. 高级评估指标的选用方法2. 同时输入多组评估指标四、优化后建模流程在正式讨论关于网格搜索的进阶…...

基于 Python 实时图像获取及处理软件图像获取;图像处理;人脸识别设计 计算机毕设 附完整代码+论文 +报告

界面结果:图像获取;图像处理;人脸识别 程序结构设计 图形用户界面设计与程序结构设计是互为表里的。或者说,程序结构设计是软件设计最本质、最核心的内容。徒有界面而内部逻辑结构混乱的软件一无是处。 Windows 操作系统是一款图形化的操作系统,相比于早期的计算机使用的命…...

前后端RSA互相加解密、加签验签、密钥对生成(Java)

目录一、序言二、关于PKCS#1和PKCS#8格式密钥1、简介2、区别二、关于JSEncrypt三、关于jsrsasign四、前端RSA加解密、加验签示例1、相关依赖2、cryptoUtils工具类封装3、测试用例五、Java后端RSA加解密、加验签1、CryptoUtils工具类封装2、测试用例六、前后端加解密、加验签交互…...

基于Java+SpringBoot+Vue前后端分离学生宿舍管理系统设计与实现

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建、毕业项目实战、项目定制✌ 博主作品&#xff1a;《微服务实战》专栏是本人的实战经验总结&#xff0c;《S…...

前端高频面试题—JavaScript篇(二)

&#x1f4bb;前端高频面试题—JavaScript篇&#xff08;二&#xff09; &#x1f3e0;专栏&#xff1a;前端面试题 &#x1f440;个人主页&#xff1a;繁星学编程&#x1f341; &#x1f9d1;个人简介&#xff1a;一个不断提高自我的平凡人&#x1f680; &#x1f50a;分享方向…...

【微信小游戏开发笔记】第二节:Cocos开发界面常用功能简介

Cocos开发界面常用功能简介 本章只介绍微信小游戏开发时常用的功能&#xff0c;其他功能不常用&#xff0c;写多了记不住&#xff08;其实是懒 -_-!&#xff09;&#xff1a; 层级管理器&#xff0c;用于操作各个节点。资源管理器&#xff0c;用于操作各种文件资源。场景编辑…...

3分钟,学会了一个调试CSS的小妙招

Ⅰ. 作用 用于调试CSS , 比控制台添更加方便&#xff0c;不需要寻找 &#xff1b;边添加样式&#xff0c;边可以查看效果&#xff0c;适合初学者对CSS 的理解和学习&#xff1b; Ⅱ. 快速实现&#xff08;两边&#xff09; ① 显示这个样式眶 给 head 和 style 标签添加一个…...

app网站及其特色/360推广登录

HTML DOM getElementsByClassName() 方法实例获取所有指定类名的元素&#xff1a;var x document.getElementsByClassName("example");尝试一下 定义和使用getElementsByClassName() 方法返回文档中所有指定类名的元素集合&#xff0c;作为 NodeList 对象。NodeList…...

网站公司怎么做运营商/焊工培训

實現java發送郵件的過程大體有以下幾步&#xff1a;准備一個properties文件&#xff0c;該文件中存放SMTP服務器地址等參數。利用properties創建一個Session對象利用Session創建Message對象&#xff0c;然后設置郵件主題和正文利用Transport對象發送郵件需要的jar有2個&#xf…...

宁波网站建设与设计制作/百度商店

加油加油转载于:https://www.cnblogs.com/naliang/p/4974360.html...

外贸看的英文网站/头条新闻今日头条官方版本

胖胖瑶绘画 - 原创很多网友留言问我怎么开始&#xff1f;零基础真的可以吗&#xff1f;没有天赋怎么办&#xff1f;其实&#xff0c;画画不一定非要追求写实&#xff0c;简单的小画好看之余也更加有趣。放松心态&#xff0c;给自己多一点自信和鼓励。胖胖瑶绘画 - 原创“ 再牛逼…...

吕梁网站制作吕梁安全/中文域名注册

从一个运行了RTX系统的程序中跳转到另一个带有RTX系统的程序时,程序卡在RTX初始化中,在跳转前关闭滴答定时器中断,跳转正常 http://www.keil.com/support/docs/3925.htm...

wordpress博客页修改/百度营销推广靠谱吗

一、废话 听说很多地方都降温了&#xff0c;希望大家注意身体&#xff0c;别冻着了&#xff01; 二、正文 在Android的网络通讯中&#xff0c;通常会使用Socket进行设备间数的数据通讯&#xff0c;使用Http来对网络数据进行请求。 1、Socket&#xff08;套接字&#xff09; 不管…...