4-1-2.C# 数据容器 - List 扩展(List 注意事项、List 存储对象的特性、List 与数组的转换)

List 概述

  1. List<T> 存储的元素是有序的

  2. List<T> 存储的元素是可重复的

  3. List<T> 支持泛型,可以指定存储的元素的类型

  4. List<T> 支持索引,可以通过索引获取或修改元素

  5. List<T> 支持动态大小(有扩容机制),不同于数组的固定大小

  6. List<T> 内部使用数组来存储元素,当数组填满时,会自动分配一个新的、更大的数组,并将现有元素复制到新数组中

  7. List<T> 不是线程安全的,在多线程环境中需要谨慎使用


一、List 注意事项

1、List 存储的元素是可重复的
List<int> nums = new List<int>();nums.Add(1);
nums.Add(2);
nums.Add(3);
nums.Add(1);foreach (int num in nums)
{Console.WriteLine(num);
}
1
2
3
1
2、List 使用时要注意不要越界
List<int> nums = new List<int>();nums.Add(1);
nums.Add(2);
nums.Add(3);Console.WriteLine(nums[10]);
# 输出结果未经处理的异常:  System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。

二、List 存储对象的特性

  1. List 存储对象并对对象进行查找时,对于没有重写 Equals 和 GetHashCode 方法的对象可能不太方便
internal class Person
{public String name;public int age;public Person() { }public Person(string name, int age){this.name = name;this.age = age;}
}
List<Person> persons = new List<Person>();persons.Add(new Person("tom", 20));
persons.Add(new Person("jack", 25));
persons.Add(new Person("smith", 30));Console.WriteLine(persons.IndexOf(new Person("tom", 20)));
# 输出结果-1
  1. List 存储对象并对对象进行查找时,对于重写 Equals 和 GetHashCode 方法的对象比较方便
internal class Staff
{public String name;public int age;public Staff() { }public Staff(string name, int age){this.name = name;this.age = age;}public override bool Equals(object obj){// 检查是否为同一个对象的引用if (obj == this) return true;// 检查对象是否为空if (obj == null) return false;// 检查类型是否相同if (obj.GetType() != this.GetType()) return false;// 将 obj 转换为 StaffB 类型并进行属性比较Staff staff = obj as Staff;bool agesAreEqual = age == staff.age;bool namesAreEqual = name == null ? null == staff.name : name.Equals(staff.name);return agesAreEqual && namesAreEqual;}public override int GetHashCode(){// 使用属性生成哈希码int hash = 17;hash = hash * 23 + name?.GetHashCode() ?? 0;hash = hash * 23 + age.GetHashCode();return hash;}
}
List<Staff> staffs = new List<Staff>();staffs.Add(new Staff("tom", 20));
staffs.Add(new Staff("jack", 25));
staffs.Add(new Staff("smith", 30));Console.WriteLine(staffs.IndexOf(new Staff("tom", 20)));
# 输出结果0

三、List 与数组的转换

1、List 转数组
List<int> list = new List<int> { 1, 2, 3, 4, 5 };int[] array = list.ToArray();foreach (int item in array)
{Console.WriteLine(item);
}
# 输出结果
1
2
3
4
5
2、数组转 List
int[] array = { 1, 2, 3, 4, 5 };List<int> list = new List<int>(array);foreach (int item in list)
{Console.WriteLine(item);
}
# 输出结果1
2
3
4
5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/60194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第四十三天|Day43 动态规划

300.最长递增子序列 视频讲解&#xff1a;https://www.bilibili.com/video/BV1ng411J7xP https://programmercarl.com/0300.%E6%9C%80%E9%95%BF%E4%B8%8A%E5%8D%87%E5%AD%90%E5%BA%8F%E5%88%97.html 思路 #define max(a, b) ((a) > (b) ? (a) : (b)) int lengthOfLIS(int*…

Axure网络短剧APP端原型图,竖屏微剧视频模版40页

作品概况 页面数量&#xff1a;共 40 页 使用软件&#xff1a;Axure RP 9 及以上&#xff0c;非软件无源码 适用领域&#xff1a;短剧、微短剧、竖屏视频 作品特色 本作品为网络短剧APP的Axure原型设计图&#xff0c;定位属于免费短剧软件&#xff0c;类似红果短剧、河马剧场…

【LeetCode】【算法】560. 和为 K 的子数组

LeetCode 560. 和为 K 的子数组 题目描述 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 思路 思路&#xff1a;前缀和 定义数组preSum[nums.length1]&#xff0c;在里面计算nums…

【Spring】本地事务

一、事务的基本性质 原子性&#xff1a;一系列操作整体不可拆分&#xff0c;要么同时成功&#xff0c;要么同时失败。&#xff08;下订单、减库存、减积分&#xff09;一致性&#xff1a;数据在事务的前后&#xff0c;业务整体一致。&#xff08;存取钱的总数量&#xff09;隔…

从零开始的 Hugging Face 项目:我的首个在线 SQL 查询工具之旅20241111

从零开始的 Hugging Face 项目&#xff1a;我的首个在线 SQL 查询工具之旅 作为一名 AI 初学者&#xff0c;我最近完成了一个意义非凡的项目&#xff1a;在 Hugging Face Spaces 上构建了一个简单却实用的在线 SQL 查询工具。这个项目不仅让我了解了 Hugging Face 平台的核心功…

Windows,虚拟机Ubuntu和开发板三者之间的NFS服务器搭建

Windows,虚拟机Ubuntu和开发板三者之间的NFS服务器搭建 &#xff08;1&#xff09;虚拟机 ubuntu 要使用桥接模式&#xff0c;不能使用其他模式 &#xff08;2&#xff09;通过网线将PC和开发板网口直连:这样的连接&#xff0c;开发板是无法连接外网的 &#xff08;3&#xff…

C语言第十一周课——函数的调用

目录 一、冒泡法排序 二、二分法查找 一、冒泡法排序 通过调用函数来实现冒泡法 #include<stdio.h> // 定义数组长度 #define SIZE 3 void bubbleSort(int arr[], int n);int main() {int arr[SIZE];int i;// 从控制台输入数字到数组printf("请输入%d个整数&#x…

C# 有趣的小程序—桌面精灵详细讲解

C# 桌面精灵详细讲解 最近写了一个简化版桌面精灵&#xff0c;效果如图所示&#xff0c;可以实现切换动画&#xff0c;说话、鼠标拖动&#xff0c;等功能。具体如何做&#xff0c;我发布了一个资源里面包含ppt详解、源代码以及动画素材。放心吧&#xff0c;免费的&#xff0c;…

【系统架构设计师】真题论文: 论软件可靠性设计与应用(包括解题思路和素材)

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2009年 试题4)解题思路论文素材参考软件可靠性概念软件可靠性的重要意义影响软件可靠性的因素软件可靠性设计方法真题题目(2009年 试题4) 目前在企业中,以软件为核心的产品得到了广泛的应用。随着系…

如何开发查找附近地点的微信小程序

我开发的是找附近卫生间的小程序。 在现代城市生活中&#xff0c;找到一个干净、方便的公共卫生间有时可能是一个挑战。为了解决这个问题&#xff0c;我们可以开发一款微信小程序&#xff0c;帮助用户快速找到附近的卫生间。本文将介绍如何开发这样一款小程序&#xff0c;包…

视觉SLAM数学基础

本文系统梳理从相机成像模型&#xff0c;通过不同图像帧之间的构造几何约束求解位姿变换&#xff0c;再根据位姿变换和匹配点还原三维坐标的过程&#xff0c;可以作为基于特征点法的视觉SLAM的数学基础。 1、相机成像模型 1.1、针孔相机模型 实际相机的成像方式通常很复杂&a…

19.(开发工具篇mysql库)mysql锁表问题解决

1&#xff1a;查看锁表情况 show OPEN TABLES where In_use > 0; 2&#xff1a;查看所有进程命令 show processlist 3&#xff1a;杀对应进程&#xff08;通过host&#xff0c;db找对应的ID&#xff09; kill 57303

计算机新手练级攻略——如何搜索问题

目录 计算机学生新手练级攻略——如何搜索问题1.明确搜索意图2.使用精确关键词3.使用专业引擎搜索4.利用好技术社区1. Stack Overflow2. GitHub3. IEEE Xplore4. DBLP 5.使用代码搜索工具1. GitHub 代码搜索2. Stack Overflow 代码搜索3. Papers with Code4. IEEE Xplore 6.查阅…

51c自动驾驶~合集10

我自己的原文哦~ https://blog.51cto.com/whaosoft/11638131 #端到端任务 说起端到端&#xff0c;每个从业者可能都觉得会是下一代自动驾驶量产方案绕不开的点&#xff01;特斯拉率先吹响了方案更新的号角&#xff0c;无论是完全端到端&#xff0c;还是专注于planner的模型&a…

““和“*“:身怀绝技的双飞客

"&"和"*"是C语言里面的两个斜杠青年&#xff0c;不同的形式具有不同的作用。 一、"&"运算符 1&#xff0e;按位与运算符&#xff08;Bitwise AND operator&#xff09; 对两个操作数的每一位进行逐位比较&#xff0c;相应位都为1时&a…

大模型日报|6 篇必读的大模型论文

1.华为推出科学智能体 Agent K v1.0&#xff0c;已达 Kaggle 大师水平 在这项工作中&#xff0c;来自华为诺亚方舟实验室和伦敦大学学院的研究团队提出了 Agent K v1.0&#xff0c;它是一个端到端自主数据科学智能体&#xff08;agent&#xff09;&#xff0c;旨在对各种数据科…

Redis在docker中的主从,哨兵配置

主从配置 docker 中redis服务启动&#xff0c;将配置文件和数据挂载到 redisData中,记得先创建好redis.conf docker run -p 6379:6379 \--name redis \-v /root/redisData/data:/data \-v /root/redisData/conf/redis.conf:/etc/redis/redis.conf \-d redis redis-server /et…

游戏中的设计模式及杂项

概述 如果要做以下游戏功能会用到哪些设计模式。比如创建一个人物角色&#xff0c;这个角色可以装备刀&#xff0c;然后角色可以用刀砍怪物&#xff0c;造成流血。 对于这个游戏功能&#xff0c;可以使用以下设计模式&#xff1a; 工厂模式&#xff08;Factory Pattern&#x…

MySQL核心业务大表归档过程

记录一下2年前的MySQL大表的归档&#xff0c;当时刚到公司&#xff0c;发现MySQL的业务核心库&#xff0c;超过亿条的有7张表&#xff0c;最大的表有9亿多条&#xff0c;有37张表超过5百万条&#xff0c;部分表行数如下&#xff1a; 在测试的MySQL环境 &#xff1a; pt-archiv…

cache(二)直接缓存映射

在知乎发现一份不错得学习资料 请教CPU的cache中关于line,block,index等的理解&#xff1f; PPT 地址 https%3A//cs.slu.edu/%7Efritts/CSCI224_S15/schedule/chap6-cache-memory.pptx 课程主页 https://cs.slu.edu/~fritts/CSCI224_S15/schedule/ 0. 缓存定义 这张图展示了缓…