C#集合(泛型集合与非泛型)

2023-10-26

每日一句:自律+努力+方法+坚持+时间=优秀

集合特点:

一种数据容器,一种数据结构

容纳多个数据;大小可变;空间不一定连续

命名空间:

非泛型集合:System.Collections;

非泛型集合:System.Collections.Generic;

集合两大体系:非泛型集合、泛型集合

非泛型集合 泛型集合
列表 ArrayList List<T>
字典 HashTable Dictionary<TKey,TValue>
堆栈 Stack Stack<T>
队列 Queue

Queue<T>

区别:

非泛型集合 泛型集合
可以增加任何类型 对所有保存的元素进行类型约束
泛型集合将所有元素都看成Object类型,是引用类型,如果),添加/读取值类型需要装箱,拆箱,会带来性能额外的开销 添加/读取值类型无需装箱,拆箱

非泛型集合缺点:

1.性能不好,可能发生装箱(将值类型强制转换成引用类型)
2.类型不安全,可能会发生类型转换的异常

泛型集合优点与特性: 

性能高、类型安全、二进制代码重要,代码的扩展

详情——>

目录

列表 ArrayList   List

ArrayList

字典Hashtable    Dictionary,tvalue>

Hashtable(哈希表)

字典嵌套字典

堆栈 Stack (后进先出)    Stack

对列 Queue(先进先出)    Queue


列表 ArrayList   List<T>

ArrayList

初始化:

ArrayList  List=new ArrayList();
ArrayList  List=new ArrayList(arryName); arryName:要添加集合的数组名
ArrayList  List=new ArrayList(n); n:ArrayList对象的空间大小

属性:

Count 获取ArrayList中实际包含的元素数
Item 获取或设置指定索引处的元素数

方法:

元素的添加
Add() 将对象添加到集合结尾处
Insert() 将元素插入集合的指定索引处List.Insert(3,"张三”);
元素的删除
Clear() 移除所有元素
Remove() 移除某个元素
RemoveAt(int index) 移除指定索引处的元素

RemoveRange

(int index,int count)

移除一定范围的元素,count:要移除的元素数
元素的查找
Contains() 用来确定某元素是否在ArrayList集合中,返回值为bool
Sort() 对集合中的元素进行排序

ArrayList的遍历

foreach语句

foreach(元素类型   迭代变量名  in 要处理的集合/数组名){}

foreach(string str in list)

{Console.WriteLine(str);}

字典Hashtable    Dictionary<TKey,Tvalue>

一键对应一值,无序输出,不能重复键

Hashtable(哈希表)

表示键/值对的集合

它的每个元素都是一个存储在DictoryEntry对象中的键/值对

键不能为空引用,但值可以

初始化:

Hashtable hashtable=new Hashtable();

方法:

元素的添加
Add(Object Key,Object value) Key:添加元素的键,value:添加元素的值
元素的删除
Clear() 移除所有元素
Remove(Object Key) 移除指定键的元素
元素的查找
Contains(Object Key) 判断是否返回指定键,返回值bool型
ContainsValue(Object value) 判断是否包含特定值,返回值bool型

Hashtable元素的遍历

//遍历Hashtable中的元素并输出其键值对

foreach(DictionaryEntry  dicEntry  in  hashtable)

{ Console.WriteLine(dicEntry.key + dicEntry.Value);

//获取键的集合

ICollection key=ht.keys;

foreach(string K in key)

{ Console.WriteLine(K+":"+ht[k];}

字典嵌套字典

private Dictionary<string,Dictionary<string,string>>  dic=

new Dictionary<string(主键),Dictionary<string(子键),string>>();

void Start()

{ dic.Add("张三”,new Dictionary<string,string>());

dic["张三"].Add("电话”,“12345”);

dic["张三"].Add("地址”,“长春”);

Console.WriteLine(dic["张三"]["电话"]+"\t"+["张三"]["电话"]);}

堆栈 Stack (后进先出)    Stack<T>

 

浏览器  撤销 

Push() 压栈
Pop() 弹栈   读取并移除顶部对象
Peek() 读栈顶   读取但不移除顶部对象

练习:主菜单——选项——游戏选项——难度调节——一般

逐层压栈,逐层弹栈,最后一个只读不弹

 private Stack stack = new Stack();
    void Start()
    {
        stack.Push("主菜单");
        stack.Push("选项");
        stack.Push("游戏选项");
        stack.Push("难度调节");
        stack.Push("一般");
        while (stack.Count>1)
        {
            Debug.Log("弹栈:" + stack.Pop());
        }
        Debug.Log("只读不弹:" + stack.Peek());
    }

对列 Queue(先进先出)    Queue<T>

银行拿号,买票

Queue queue=new Queue();

Euqueue() 入队,在列表中添加一项
Dequeue() 出队,读取并移除
Peek() 读队首

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C#集合(泛型集合与非泛型) 的相关文章

随机推荐

  • JAVA通过反射调用外部的jar包

    把外包jar的信息写在配置文件中 这样如果外部jar改变了 只需要修改properties相应的配置即可 config properties文件内容如下 jarUrl E MessageSend jar className org line
  • 高速USB转8串口产品设计-RS485串口

    基于480Mbps 高速USB转8路串口芯片CH348 可以为各类主机扩展出8个独立的串口 使用厂商提供的VCP串口驱动程序 可支持Windows Linux Android macOS等操作系统 使用单个CH348芯片即可实现USB一拖八
  • 离线 安装webssh

    1 安装包 和 webssh 代码准备 1 cmake 安装 安装参考文档 文档地址 下载地址 tar xvfz cmake 3 24 2 linux x86 64 tar gz 配置环境全局变量 vim etc profile 添加 ex
  • shell脚本初学(带参脚本传递、执行)(二)

    一 带有参数的shell脚本 脚本内获取参数的格式为 n n 代表一个数字 1 为执行脚本的第一个参数 2 为执行脚本的第二个参数 其中 0 为执行的文件名 包含文件路径 bin bash 指定编译器 test sh文件 echo Shel
  • C/C++和Python混合编程

    1 首先需要下载python源代码进行编译 源代码编译的过程访问如下链接 编译python源码 2 创建一个win32控制台项目 项目名称为 InvokePython 如图 3 然后将python源代码中的Include文件夹拷贝到该项目
  • 天线长度计算

    首先 理想天线的长度是半波长 平时说的四分之一波长天线 实际上需要考虑 地 才能构成完整的天线 也就是我们常说的 非平衡天线 天线本身只是天线的一部分 天线长度是波长的四分之一 波长 光速c 频率f 1 如 5GHz wifi天线长度计算
  • 二进制转换

    我们平时使用的十进制 十进制转二进制 整数情况 11表示成二进制数 11 2 5 余 1 5 2 2 余 1 2 2 1 余 0 1 2 0 余 1 得0结束 11的二进制表示为 从下往上 1011 小数情况 0 9表示成二进制数 0 9
  • DLNA协议

    一 DLNA协议 多屏互动技术的核心 dlna协议 利用网络技术 有线或者无线 将各种各样的设备互联 通过标准的协议 主流的是dlna协议 进行数据交互 实现媒体资源共享 比如 生活中常用的视频投屏技术 dlna协议提供的是设备互联资源共享
  • 2022 第十三届蓝桥杯大赛软件赛决赛, 国赛,C/C++ 大学B组题解

    2022 第十三届蓝桥杯大赛软件赛决赛 国赛 C C 大学B组题解 文章目录 第1题 2022 5分 第2题 钟表 5分 第3题 卡牌 10分 第4题 最大数字 10分 第5题 出差 15分 第6题 费用报销 15分 第7题 故障 20分
  • 【进程间通信 之 通信的建立】

    目录 前言 进程间通信的目的 进程间通信的方式 管道 1 匿名管道 简单示例1 消息传输 五个特性 四种场景 简单示例2 进程控制 对管道的深入理解 2 命名管道 简单示例3 不相关进程间通信 system V 共享内存 简单示例4 通知事
  • loadrunner11目标场景

    目标场景 设置一个运行目标 通过Controller的自动加载功能进行自动化负载 如果测试的结果达到目标 说明系统的性能符合测试目标 否则就提示无法达到目标 编辑目标场景 目标类型有5种
  • python-图像边缘化处理

    本文由本人原创 仅作为自己的学习记录 主要利用Sobel 用作边缘检测 它是一离散性差分算子 用来运算图像亮度函数的灰度值 在图像的任何一点使用此算子 将会产生对应的灰度矢量或是其法矢量 Sobel边缘检测通常带有方向性 可以只检测竖直边缘
  • 【Linux0.11 源码历险记 2】《保护模式》

    继续跟着stup s 来看 lidt idt 48 load idt with 0 0 lgdt gdt 48 load gdt with whatever appropriate idt 48 word 0 idt limit 0 wor
  • 【Unity】 2D 游戏 库存模块实现

    库存模块主要参考了 youtube 上的视频 BMo 的 Flexible INVENTORY SYSTEM in Unity with Events and Scriptable Objects 和 Simple Inventory UI
  • DVWA SQL injection

    low 猜测表名 1 union select 1 group concat table name from information schema tables where table schema dvwa 如果出现问题 到MySQL里将
  • Java常用对象API——基本数据类型对象包装类

    基本数据类型对象包装类 为了方便操作基本数据类型值 将其封装成了对象 在对象中定义了属性和行为丰富了该数据的操作 用于描述该对象的类就称为基本数据类型对象包装类 byte Byte short Short int Integer long
  • EXCEL中数据透视表的(空白)如何不显示,并且不影响数据更新

    或许有碰到同样问题的 希望对大家有所帮助 1 数据透视表更新过来的数据显示 空白 不好看 开始将用户做了筛选 将空白的复选框去掉 可以达到效果 但是发现有数据更新时 新的数据不能被同步显示 除非手动去再次筛选用户将除空白外的数据勾选 2 点
  • Ble Mesh的Heatbeat(心跳)&地址&Model(模型)

    心跳 将节点配置为定期发送称为心跳消息的消息 Heartbeat 消息的目的 1 表示该节点仍然处于活动状态 2 允许根据传递 Heartbeat 消息所需的跳数确定其与接收者的距离 Heartbaeat的opcode 和Friend re
  • 主存储器的基本组成

    主存储器的基本组成 存储体 存储体也叫存储矩阵 是由一个个存储0或1的记忆单元 存储元 构成的 为了存取存储体中的信息 必须对存储单元进行编址 编址单位是指具有相同地址的那些存储元件构成的一个单位 常见有按字节编址 寻址访存 CPU首先把被
  • C#集合(泛型集合与非泛型)

    每日一句 自律 努力 方法 坚持 时间 优秀 集合特点 一种数据容器 一种数据结构 容纳多个数据 大小可变 空间不一定连续 命名空间 非泛型集合 System Collections 非泛型集合 System Collections Gen