从最开始接触的数组,到非泛型集合类(ArrayList、HashTable、Queue、Stack)、泛型集合类(List<T>、Dictionary<T>、Queue<T>、Stack<T>), 实际运用中,他们各自有自己的应用领取,就好比刚开始学习英语的时候,有很多个单词都可以翻译成憎恨的意思,但总是混淆不清楚,实际上每个单词的使用场合、语气色彩都不尽相同。根据场景的需要,使用正确的单词,表达正确的感情。同样适用于编程。

数组: 适用于明确长度无需在其中做插入操作的一组相同类型的数据,因为定义数组的时候,就必须申明长度,如果过长,浪费内存,过短后期又会导致数据溢出

非泛型集合类: 可适用一组不同类型的数据,内部自动完成装箱、拆箱(Object)操作,适用广泛,但是损耗内存

泛型集合类:相同类型的一组数据,避免了装箱、拆箱 造成的内存损耗

关于 List 操作,有简单类型操作

          List<string> strList = new List<string>();
strList.Add("");
strList.Add(""); Console.WriteLine(strList[]);

如果有相同类型 List<string> list2 对象,将两个对象进行合并,则遍历、累加即可

            List<string> strList2 = new List<string>()
{
"asd","","sdfds"
}; foreach (var item in strList2)
{
strList.Add(item);
}

对于List<Model>  操作,亦如此

            List<User> sUsers = new List<User>();

            var newdata = new User
{
Name = "sdf",UserId = ,Sex = "男"
}; sUsers.Add(newdata);

然后,合并

            List<User> users = new List<User>()
{
new User() {Name = "a",UserId = ,Sex = "男"},
new User() {Name = "b",UserId = ,Sex = "男"},
new User() {Name = "c",UserId = ,Sex = "男"},
new User() {Name = "d",UserId = ,Sex = "男"}
}; foreach (var item in users)
{
sUsers.Add(item);
}

关于字典集合类Dictionary<T>, 键值对格式,申明时定义 Key 和 value 各自的类型,然后赋值、取值、用值

与其相对的HashTable ,同样也是键值对格式,只是无需申明类型,随存随取随用

            Dictionary<int,string> dictionary = new Dictionary<int, string>();
dictionary.Add(,"aaa"); //增加元素
dictionary.Remove(); //移除指定元素
dictionary.Clear(); //移除所有元素
bool bo = dictionary.ContainsKey(); //判斷指定元素
            Hashtable hashtable = new Hashtable();
hashtable.Add("",""); //增加元素
hashtable.Add(,);
hashtable.Add(, "aaa");
hashtable.Remove(); //移除指定元素
hashtable.Clear(); //移除所有元素
bool b = hashtable.ContainsKey(); //判斷指定元素

可以看出,Hashtable 对象的内部也是键值对格式,其类型均为 object ,这样使用无类型限制,但是内部集成了装箱、拆箱操作,增大系统内存的消耗

相同点:调用方法相同,均无序,不可使用索引

不同点:一个是泛型,一个非泛型

以上介绍的集合都可以设置重复的数据,为了避免这种重复的数据存储,.NET提供集合名称集。这是一个具有不同项目的集合类型。

还有两种类型的集合,SortedSet和HastSet。

对于HashSet  主要用来对两个集合求交集、并集、差集等操作,处理包含以上的方法外,还有

            HashSet<int> name1 = new HashSet<int>();
name1.Add();
name1.Add(); HashSet<int> name2 = new HashSet<int>();
name2.Add();
name2.Add(); name1.UnionWith(name2); //求兩集合的并集
name1.IntersectWith(name2); //求两集合的交集
name1.ExceptWith(name2); //求两集合的差集,name1-name2,若无相等,则值为name1
name1.SymmetricExceptWith(name2); //求两集合的对称差集,若无相等,则值为name1+name2,若有则去同后的name1+name2

SortedSet按照排序顺序存储数据,调用方法参照HashSet,仅仅是返回的结果中自动排序

----市人皆大笑,举手揶揄之

泛型List、HashTable的更多相关文章

  1. c#重点[集合类型]异常,数组,集合ArrayList,List<>,hashTable,hashtable泛型(Dictionary)

    1.foreach[对一些数组或集合进行遍历] foreach(类型 变量名 in 集合对象){语句体} //定义一个数组 ,,,,, }; foreach(var i in sNum1) { Con ...

  2. .net学习之集合、foreach原理、Hashtable、Path类、File类、Directory类、文件流FileStream类、压缩流GZipStream、拷贝大文件、序列化和反序列化

    1.集合(1)ArrayList内部存储数据的是一个object数组,创建这个类的对象的时候,这个对象里的数组的长度为0(2)调用Add方法加元素的时候,如果第一次增加元神,就会将数组的长度变为4往里 ...

  3. C#知识点记录

    用于记录C#知识要点. 参考:CLR via C#.C#并发编程.MSDN.百度 记录方式:读每本书,先看一遍,然后第二遍的时候,写笔记. CLR:公共语言运行时(Common Language Ru ...

  4. .NET面试题系列[11] - IEnumerable<T>的派生类

    “你每次都选择合适的数据结构了吗?” - Jeffery Zhao .NET面试题系列目录 ICollection<T>继承IEnumerable<T>.在其基础上,增加了Ad ...

  5. C#数据结构选择

    选择一个合适的数据结构会对程序的性能有着显著的提高 线性表和链表: 1.LinkedList<T>:适合于元素数组不固定,存在大量列表的头尾添加动作场合.其它可使用List<T> ...

  6. C#: 集合

    摘自http://www.cnblogs.com/kissdodog/archive/2013/01/29/2882195.html 先来了解下集合的基本信息 1.BCL中集合类型分为泛型集合与非泛型 ...

  7. C# 之 集合整理

    集合,表示可以通过遍历每个元素来访问的一组对象(特别是可使用foreach循环访问):一个集合包括多个元素,即有一个集合类对象和N个元素对象. BCL(Base Class Library, 基类库) ...

  8. C#学习笔记(一):一些零散但重要的知识点汇总

    集合类型 数组 数组需要注意的就是多维数组和数组的数组之间的区别,如下: using System; namespace Study { class Program { static void Mai ...

  9. c#基础语言编程-集合

    引言 在c#常用的集合分为非泛型集合和泛型集合. 非泛型集合的类和接口位于System.Collections命名空间.这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合. 泛型集合 ...

  10. 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字

    一. 各类数据结构比较及其线程安全问题 1. Array(数组): 分配在连续内存中,不能随意扩展,数组中数值类型必须是一致的.数组的声明有两种形式:直接定义长度,然后赋值:直接赋值. 缺点:插入数据 ...

随机推荐

  1. falsk_蓝图(blueprint)

    蓝图(blueprint) 随着业务代码的增加,将所有代码都放在单个程序文件中,是非常不合适的.这不仅会让代码阅读变得困难,而且会给后期维护带来麻烦. 什么是蓝图 蓝图:用于实现单个应用的视图.模板. ...

  2. 帝国cms搜索关键字调用标签(showsearch)怎么用

    前面ytkah介绍了如何让帝国CMS7.2搜索模板支持动态标签调用,现在我们来说说怎么调用帝国cms搜索关键字调用标签(showsearch).在帝国cms后台那边的使用方法:[showsearch] ...

  3. 小程序支持打开APP了 还有小程序的标题栏也可以自定义

    就在刚刚,小程序上线两个新能力——小程序支持打开APP了,小程序的标题栏区域开放自定义.用户可以在小程序里更方便地获取到APP的服务了——APP链接分享到微信,打开小程序页面后,用户从该小程序页面里, ...

  4. idea structure窗口

    https://blog.csdn.net/qq_19934363/article/details/87994000

  5. Python中使用SMTP发送邮件以及POP收取邮件

    假设我们自己的电子邮件地址是from@163.com,对方的电子邮件地址是to@sina.com(这里的地址虚拟的),现在我们用Outlook或者Foxmail之类的软件写好邮件,填上对方的Email ...

  6. 最少步数(bfs)

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...

  7. react 首屏加载优化

    react 首屏加载优化,原本是在入口HTML文件中加载loading动画,但是部署在测试环境上的时候一直无法显示loading的部分,也是奇怪了,我们测试环境的部署一直跟本地的都不太一样,内外网的转 ...

  8. 进程理论 阻塞非阻塞 同步异步 I/O操作

    1.什么是进程 进程指的是一个正在运行的程序,进程是用来描述程序执行过程的虚拟概念 进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统其它所有的概念都是围绕进程来的 2.操作系统 操作系统 ...

  9. composer install 遭遇404错误

    [Composer\Downloader\TransportException] The "https://packagist.phpcomposer.com/p/provider-2019 ...

  10. git push 报错:you are not allowed to upload merges

    git rebase Cannot rebase: You have unstaged changes. git stash # 每次 push 前 git pull --rebase git pus ...