当前位置: 首页 > 编程日记 > 正文

C#的6种常用集合类大比拼【月儿原创】

C#的6种常用集合类大比拼

作者:清清月儿

主页:http://blog.csdn.net/21aspnet/           时间:2007.6.27

说明:MSDN没有说出几种集合类其间的区别,当然欲知更多细节可参考MSDN。

一.先来说说数组不足(也可以说集合与数组的区别

1.数组是固定大小的,不能伸缩。虽然System.Array.Resize这个泛型方法可以重置数组大小,但是该方法是重新创建新设置大小的数组,用的是旧数组的元素初始化。随后以前的数组就废弃!而集合却是可变长的

2.数组要声明元素的类型,集合类的元素类型却是object.

3.数组可读可写不能声明只读数组。集合类可以提供ReadOnly方法以只读方式使用集合。

4.数组要有整数下标才能访问特定的元素,然而很多时候这样的下标并不是很有用。集合也是数据列表却不使用下标访问。很多时候集合有定制的下标类型,对于队列和栈根本就不支持下标访问!

二.下面讲述6种常用集合

1.ArrayList类

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication1
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            ArrayList al 
= new ArrayList();
            al.Add(
100);//单个添加
            foreach (int number in new int[6937248 })
            
{
                al.Add(number);
//集体添加方法一//清清月儿 http://blog.csdn.net/21aspnet/
            }

            
int[] number2 = new int[211,12 };
            al.AddRange(number2);
//集体添加方法二
            al.Remove(3);//移除值为3的
            al.RemoveAt(3);//移除第3个
            ArrayList al2 = new ArrayList(al.GetRange(13));//新ArrayList只取旧ArrayList一部份


            Console.WriteLine(
"遍历方法一:");
            
foreach (int i in al)//不要强制转换
            {
                Console.WriteLine(i);
//遍历方法一
            }


            Console.WriteLine(
"遍历方法二:");
            
for (int i = 0; i != al2.Count; i++)//数组是length
            {
                
int number = (int)al2[i];//一定要强制转换
                Console.WriteLine(number);//遍历方法二

            }

        }

    }

}

2.Stack类

栈,后进先出。push方法入栈,pop方法出栈。

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication1
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            Stack sk 
= new Stack();
            Stack sk2 
= new Stack();
            
foreach (int i in new int[41234 })
            
{
                sk.Push(i);
//填充
                sk2.Push(i);
            }

            
            
foreach (int i in sk)
            
{
                Console.WriteLine(i);
//遍历
            }


            sk.Pop();
            Console.WriteLine(
"Pop");
            
foreach (int i in sk)
            
{
                Console.WriteLine(i);
            }

            
            sk2.Peek();
//弹出最后一项不删除//清清月儿 http://blog.csdn.net/21aspnet/
            Console.WriteLine("Peek");
            
foreach (int i in sk2)
            
{
                Console.WriteLine(i);
            }


            
while (sk2.Count != 0)
            
{
                
int i = (int)sk2.Pop();//清空
                sk2.Pop();//清空
            }

            Console.WriteLine(
"清空");
            
foreach (int i in sk2)
            
{
                Console.WriteLine(i);
            }

        }

    }

}

3.Queue类

队列,先进先出。enqueue方法入队列,dequeue方法出队列。

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication1
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            Queue qu 
= new Queue();
            Queue qu2 
= new Queue();
            
foreach (int i in new int[41234 })
            
{
                qu.Enqueue(i);
//填充
                qu2.Enqueue(i);
            }

            
            
foreach (int i in qu)
            
{
                Console.WriteLine(i);
//遍历
            }


            qu.Dequeue();
            Console.WriteLine(
"Dequeue");
            
foreach (int i in qu)
            
{
                Console.WriteLine(i);
            }

            
            qu2.Peek();
//弹出最后一项不删除
            Console.WriteLine("Peek");
            
foreach (int i in qu2)
            
{
                Console.WriteLine(i);
            }


            
while (qu2.Count != 0)
            
{
                
int i = (int)qu2.Dequeue();//清空
                qu2.Dequeue();//清空
            }

            Console.WriteLine(
"清空");
            
foreach (int i in qu2)
            
{
                Console.WriteLine(i);
            }

        }

    }

}

4.Hashtable类

哈希表,名-值对。类似于字典(比数组更强大)。哈希表是经过优化的,访问下标的对象先散列过。如果以任意类型键值访问其中元素会快于其他集合。GetHashCode()方法返回一个int型数据,使用这个键的值生成该int型数据。哈希表获取这个值最后返回一个索引,表示带有给定散列的数据项在字典中存储的位置。

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication1
{
    
class Program
    
{
        
public static void Main()
        
{

            
// Creates and initializes a new Hashtable.
            Hashtable myHT = new Hashtable();
            myHT.Add(
"one""The");
            myHT.Add(
"two""quick");
            myHT.Add(
"three""brown");
            myHT.Add(
"four""fox");

            
// Displays the Hashtable.//清清月儿 http://blog.csdn.net/21aspnet/
            Console.WriteLine("The Hashtable contains the following:");
            PrintKeysAndValues(myHT);
        }



        
public static void PrintKeysAndValues(Hashtable myHT)
        
{
            
foreach (string s in myHT.Keys)
                Console.WriteLine(s);

            Console.WriteLine(
" -KEY- -VALUE-");
            
foreach (DictionaryEntry de in myHT)
                Console.WriteLine(
" {0}: {1}", de.Key, de.Value);
            Console.WriteLine();
        }

    }

}

5.SortedList类

与哈希表类似,区别在于SortedList中的Key数组排好序的。

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication1
{
    
class Program
    
{
        
public static void Main()
        
{

            SortedList sl 
= new SortedList();
            sl[
"c"= 41;
            sl[
"a"= 42;
            sl[
"d"= 11;
            sl[
"b"= 13;

            
foreach (DictionaryEntry element in sl)
            
{
                
string s = (string)element.Key;
                
int i = (int)element.Value;
                Console.WriteLine(
"{0},{1}",s,i);
            }

        }

    }

}

6.NameValueCollection类

官方给NameValueCollection定义为特殊集合一类,在System.Collections.Specialized下。

System.Collections.Specialized下还有HybridDicionary类,建议少于10个元素用HybridDicionary,当元素增加会自动转为HashTable。

System.Collections.Specialized下还有HybridDicionary类,字符串集合。

System.Collections.Specialized下还有其他类大家可以各取所需!

言归正转主要说NameValueCollection,HashTable 和 NameValueCollection很类似但是他们还是有区别的,HashTable 的KEY是唯一性,而NameValueCollection则不唯一

using System;
using System.Collections.Generic;
using System.Collections;
using System.Collections.Specialized;
namespace ConsoleApplication1
{

    
class Program
    
{

        
static void Main(string[] args)
        
{
            System.Collections.Hashtable ht 
= new System.Collections.Hashtable();
            ht.Add(
"DdpMDisplaySeq".Trim(), "Display Sequence".Trim());
            ht.Add(
"DdpMNameChi".Trim(), "Name (Chinese)".Trim());
            ht.Add(
"DdpMNameEng".Trim(), "Name (English)".Trim());
            ht.Add(
"Comment".Trim(), "Comment".Trim());
            ht.Add(
"DdpMMarketCode".Trim(), "Market Code".Trim());
            
foreach (object key in ht.Keys)
            
{
                Console.WriteLine(
"{0}/{1}    {2},{3}", key, ht[key], key.GetHashCode(), ht[key].GetHashCode());
            }

            Console.WriteLine(
" ");//清清月儿 http://blog.csdn.net/21aspnet/
            NameValueCollection myCol 
= new NameValueCollection();
            myCol.Add(
"DdpMDisplaySeq".Trim(), "Display Sequence".Trim());
            myCol.Add(
"DdpMNameChi".Trim(), "Name (Chinese)".Trim());
            myCol.Add(
"DdpMNameChi".Trim(), "Name (English)".Trim());
            myCol.Add(
"Comment".Trim(), "Comment".Trim());
            myCol.Add(
"DdpMMarketCode".Trim(), "Market Code".Trim());
            
foreach (string key in myCol.Keys)
            
{
                Console.WriteLine(
"{0}/{1} {2},{3}", key, myCol[key], key.GetHashCode(), myCol[key].GetHashCode());
            }


        }


    }



}



相关文章:

“35岁才是一个程序员成熟的开始!”

作者 | 王晓波,同程旅行机票事业群CTO【写在前面】不知道从什么时候开始,身边的“小朋友”们都开始为一件事感到焦虑,那就是:“到了35岁我还能找到一份编程的工作吗?”。坦白讲,我年轻的时候也有过迷茫的时…

centos安装easy_instal

easy_install与yum类似,使用easy_install,可以轻松在pypi软件库里面搜索python各类软件安装easy_install比较简单,如果配置好yum,就可以直接搜索python-setuptoolsyum –y install python-setuptools安装完python-setuptools之后&…

如何用xmanager远程连接centos6.0的桌面

在centos6.0系统上设置 修改custom.conf文件 vim /etc/gdm/custom.conf 在[security]下面添加 AllowRemoteRoottrue 在[xdmcp]下面添加 Port177 Enable1 修改完后效果如下: [daemon] [security] AllowRemoteRoottrue [xdmcp] Port177 Enable1 [greeter] [chooser] […

ASP.NET 3.5 企业级开发

议题 .NET Framework 3.5 和Visual Studio 2008 C# 面向对象程序设计 ASP.NET 状态管理和页面传值 ASP.NET 中的错误处理 ADO.NET与数据访问 架构与模式 安全与性能 优秀的团队开发管理功能C# 面向对象程序设计封装继承性多态性抽象类接口装箱和拆箱泛型ASP.NET 状态管理…

DEV报表之条形码

今天无意间发现DEV的报表居然自带条形码生成控件,正好要用到,省的自己手动生成图片了。前提:一张做好的报表Dev报表基础教程首先拖出XRBarCode控件,放到表头的空白位置,摆好高度宽度。选择Symbology,设置你…

Copilot 真会砸了程序员的饭碗?

作者 | 马超 责编 | 孙胜出品 | CSDN(ID:CSDNnews)最近OpenAI与GitHub联合构建的AI自动编程工具Copilot正式登场!Copilot基于自然语言处理模型GPT-3搭建而成,可在程序员编写代码时提供建议,甚至直接补…

提升城镇化质量 有利于激活智慧城市潜能

国家发展改革委副主任胡祖才指出,智慧城市建设是中国新型城镇化的重要内容,也是推进我国新型城镇化建设的一项长期的任务。如何通过智慧城市建设,促进城市发展模式向资源节约型、环境友好型转变,城市管理由粗放型、经济型向精专化…

变量的属性(全局变量、局部变量、动态变量、静态变量等)

变量的属性 1、变量的分类 l 根据作用域:可分为全局变量和局部变量。 l 根据生存周期:可分为静态存储方式和动态存储方式,具体地又分为自动的(auto)、静态的(static)、寄…

Science论文:诺奖经济学家的经典决策模型,被AI挑战

在2019年DOTA2的顶级赛事TI8的正赛完成之后,OpenAI的人工智能战队与TI8的冠军OG举行了一场表演赛,在英雄阵容限定17个,部分道具和功能禁用的前提下,OpenAI以2:0完胜了OG,尤其值得一提的是第二场比赛仅用时1…

Canny算法源码,欢迎交流

http://blog.csdn.net/jianxiong8814/article/details/1563109 http://blog.csdn.net/assuper/article/details/6937130 存在的bug 在dsp http://bbs.csdn.net/topics/390445572

Provisioning Services 7.8 入门系列教程之十三 使用 Boot Device Management(BDM)

续Provisioning Services 7.8 入门系列教程之十二 实现高可用性 可以使用 Boot Device Management 实用程序将 IP 和引导信息(引导设备)交付给目标设备,此方法可以取代传统的 DHCP、PXE 和 TFTP 方法。 如果使用此方法,当目标设备…

Memcached深度分析

Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载, 提升性能。关于这个东西,相信很多人都用过,本文意在通过对memcached的实现及代码分析…

【分享】 IT囧事

导读:企业的业务发展离不开信息化建设,信息系统的稳定运行更离不开IT运维的支持,许多生命期短暂或者使用效果不太好的IT系统,都是因为后期的维护和支持不到位,才导致前期投入的资金和人力付之东流,让人扼腕…

为什么掌握Linux对程序员这么重要……

人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个软件工程师岗位,都要求掌握Linux。可以说,打开 Linux 操作系统这扇门,你才是合格的软件工程师。如果不能熟练地操作 Linux,你基本上等于少…

Java并发编程有多难?这几个核心技术你掌握了吗?

本文主要内容索引 1、Java线程 2、线程模型 3、Java线程池 4、Future(各种Future) 5、Fork/Join框架 6、volatile 7、CAS(原子操作) 8、AQS(并发同步框架) 9、synchronized(同步锁) 10、并发队列&#xff0…

这届 AI 预测欧洲杯冠军,通通被打脸

持续了一个月的欧洲杯,终于落下帷幕。北京时间 7 月 12 日(周一)凌晨,本届欧洲杯决赛中,意大利对阵英格兰。两队在 120 分钟时间里 1-1 战平,意大利在欧洲杯中通过点球大战以 3:2击败英格兰夺冠。意大利上次…

资源的正确引用

对资源的引用应该发生在对资源的保护期间。 比如在所保护内hold住资源、local_bh_disable内hold住资源; 否则对资源的使用可能发生不一致的情况。 PS: 代码逻辑应该符合真实世界的合理逻辑。转载于:https://www.cnblogs.com/kernel521/p/4045976.html

给网站管理员的建议:创建可利用的、可抓取的网站

转载自 谷歌中文网站管理员博客 发表者 T.V. Raman,研究学者 原文: Webmaster tips for creating accessible, crawlable sites 发表于:2008年4月14日 上午10:47 Hubbell和我正在我们位于加州的家中度假。欢迎您随时 阅读在此之前我为网站管…

iptables如何开放被动模式的FTP服务

如何开放被动模式的FTP服务? 1.装载FTP追踪时的专用的模块; # modprobe nf_conntrack_ftp # lsmod | grep ftp 2.放行请求报文 命令连接: NEW,ESTABLISHED 数据连接: RELATED,ESTABLISHED #iptables -I INPUT -d 192.168.141.10 …

KNN 分类算法原理代码解析

作者 | Charmve来源 | 迈微AI研习社k-最近邻算法是基于实例的学习方法中最基本的,先介绍基x于实例学习的相关概念。基于实例的学习已知一系列的训练样例,很多学习方法为目标函数建立起明确的一般化描述;但与此不同,基于实例的学习…

Roadsend PHP-开源的PHP代码编译器

Roadsend PHP 是一个开源的php compiler, 可以将你的PHP代码编译成原生的二进制代码, 无需分发php源码. Roadsend 可以将你的PHP web项目编译成FastCGI的可执行文件,这样apache,nginx可以通过fastcgi方式和编译后的 程序进行通讯. 看起来,PHP 编写的程序可以和C编写的程序有同…

Android安卓开发中图片缩放讲解

安卓开发中应用到图片的处理时候,我们通常会怎么缩放操作呢,来看下面的两种做法: 方法1:按固定比例进行缩放 在开发一些软件,如新闻客户端,很多时候要显示图片的缩略图,由于手机屏幕限制&#x…

a标签是什么意思 怎么使用?

转自&#xff1a;https://www.imooc.com/qadetail/190881 (1) a标签的作用&#xff1a;超链接&#xff0c;用于跳转到别的网页。 (2) a标签的用法&#xff1a;<a href"网址" target"_blank" >到百度首页</a> 其中target是a标签的一个属性&…

【Java】Lucene检索引擎详解

基于Java的全文索引/检索引擎——Lucene Lucene不是一个完整的全文索引应用&#xff0c;而是是一个用Java写的全文索引引擎工具包&#xff0c;它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。 Lucene的作者&#xff1a;Lucene的贡献者Doug Cutting是一位资深全…

大手笔 !Julia Computing 获 2400 万美元融资,前 Snowflake CEO 加入董事会

整理 | 梦依丹出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;2021 年 7 月 19 日&#xff0c;由 Julia 高性能编程语言创始人成立的 Julia Computing 公司完成了 2400 万美元的 A 轮融资&#xff0c;这笔融资由 Dorilton Ventures 领投&#xff0c;Menlo Ventures…

(Mirage系列之六)在Mirage里使用Collection

在Mirage中&#xff0c;Collection是包含一个或多个CVD的集合。 Collection的主要作用是简化操作。比如我有一百个终端设备需要分配基础层&#xff0c;如果没有Collection&#xff0c;那么管理员需要逐个点击。这是无趣的重复劳动。有了Collection&#xff0c;只要选择一个Coll…

WAS服务器负载测试软件导读

转帖&#xff1a;出处未知 你的Web服务器和应用到底能够支持多少并发用户访问&#xff1f;在出现大量并发请求的情况下&#xff0c;软件会出现问题吗&#xff1f;这些问题靠通常的测试手段是无法解答的。本文介绍了Microsoft为这个目的而提供的免费工具WAS及其用法。另外&#…

深度学习实现场景字符识别模型|代码干货

作者|李秋键出品|AI科技大本营(ID:rgznai100)# 前言 #文字是人从日常交流中语音中演化出来&#xff0c;用来记录信息的重要工具。文字对于人类意义非凡&#xff0c;以中国为例&#xff0c;中国地大物博&#xff0c;各个地方的口音都不统一&#xff0c;但是人们使用同一套书写体…

SQL Server 一些重要视图3

1、 sys.dm_tran_locks; 为每一把锁返回一行、request_session_id 可以与sys.dm_tran_session_transactions \sys.dm_exec_connections相关联。 request_status 查看锁的分配情况 2、 sys.dm_os_waiting_tasks; 为每一个等待的任务返回一行、blocking_session_id标记是因为谁而…

Linux下将Mysql和Apache加入到系统服务里的方法

Apache加入到系统服务里面: cp /安装目录下/apache/bin/apachectl /etc/rc.d/init.d/httpd 修改httpd 在文件头部加入如下内容&#xff1a; ### # Comments to support chkconfig on RedHat Linux # chkconfig: 2345 90 90 # description:http server ### 保存 在打入 #chkconf…