1.动态数组(ArrayList)

  动态数组(ArrayList)代表了可被单独索引的对象的有序集合。它基本上可以替代一个数组。但是,与数组不同的是,您可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增加、搜索、排序各项。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Demos
{
class Program
{
static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.Add();//单个添加
foreach (int number in new int[]{ , , , , })
{
list.Add(number);//循环添加一个数组
}
int[] number2 = new int[]{ , };
list.AddRange(number2);//集体添加
list.Remove();//删除值为3的
list.RemoveAt();//移除下标为3的
ArrayList list2 = new ArrayList(list.GetRange(, ));//新ArrayList(list2)只取旧ArrayList(list)中的一部份List<T>.GetRange(Index, Count)从下标为1的开始取三个
Console.WriteLine("Method One:");
foreach (int i in list)
{
Console.WriteLine(i);//遍历方法一
}
Console.WriteLine("Method Two:");
for (int i = ; i != list2.Count; i++)//数组是length
{
int number = (int)list2[i];//一定要强制转换
Console.WriteLine(number);//遍历方法二
}
Console.ReadKey();
}
}
}

2.哈希表(Hashtable) 

  Hashtable 类代表了一系列基于键的哈希代码组织起来的键/值对。它使用来访问集合中的元素。当您使用访问元素时,则使用哈希表,而且您可以识别一个有用的键值。哈希表中的每一项都有一个键/值对。键用于访问集合中的项目。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Demos
{
class Program
{
static void Main(string[] args)
{
Hashtable ht = new Hashtable(); ht.Add("", "hello");
ht.Add("", "world");
ht.Add("", "I");
ht.Add("", "Love");
ht.Add("", "China"); if (ht.ContainsValue("China"))//判断 Hashtable 是否包含指定的值。
{
Console.WriteLine("I know you love China!But China already has a collection");
}
else
{
ht.Add("", "China");
}
// 获取键的集合
ICollection key = ht.Keys; foreach (string k in key)
{
Console.WriteLine(k + ": " + ht[k]);
}
Console.ReadKey();
}
}
}

3.排序列表(SortedList) 

  SortedList 类代表了一系列按照键来排序的键/值对,这些键值对可以通过键和索引来访问。排序列表是数组和哈希表的组合。它包含一个可使用键或索引访问各项的列表。如果您使用索引访问各项,则它是一个动态数组(ArrayList),如果您使用键访问各项,则它是一个哈希表(Hashtable)。集合中的各项总是按键值排序

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Demos
{
class Program
{
static void Main(string[] args)
{
SortedList sl = new SortedList(); sl.Add("", "hello");
sl.Add("", "world");
sl.Add("", "I");
sl.Add("", "Love");
sl.Add("", "China"); if (sl.ContainsValue("China"))
{
Console.WriteLine("I know you love China!But China already has a collection");
}
else
{
sl.Add("", "China");
}
foreach (var item in sl.Keys)
{
Console.WriteLine(item + ":" + sl[item]);
}
int myIndex = ;
Console.WriteLine("The key at index {0} is {1}.", myIndex, sl.GetKey(myIndex));//获得下标为1的键的名称
Console.WriteLine("The value at index {0} is {1}.", myIndex, sl.GetByIndex(myIndex));//获得键为1的值
// 获取键的集合
ICollection key = sl.Keys;
foreach (string k in key)
{
Console.WriteLine(k + ": " + sl[k]);
} Console.ReadKey();
}
}
}

4.堆栈Stack

  堆栈(Stack)代表了一个后进先出的对象集合。当您需要对各项进行后进先出的访问时,则使用堆栈。当您在列表中添加一项,称为推入元素,当您从列表中移除一项时,称为弹出元素

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Demos
{
class Program
{
static void Main(string[] args)
{
Stack st = new Stack(); st.Push('A');
st.Push('B');
st.Push('C');
st.Push('D'); Console.WriteLine("Current stack: ");//当前队列,先存后出
foreach (char value in st)
{
Console.Write(value + " ");
}
Console.WriteLine();
st.Push('V');//向 Stack 的顶部添加一个对象。
st.Push('H');
Console.WriteLine("The next poppable value in stack: {0}",st.Peek());//返回在 Stack 的顶部的对象,但不移除它。
Console.WriteLine("Current stack: ");
foreach (char value in st)
{
Console.Write(value + " ");
}
Console.WriteLine();
Console.WriteLine("Removing values ");
st.Pop();//移除并返回在 Stack 的顶部的对象
st.Pop();
st.Pop(); Console.WriteLine("Current stack: ");
foreach (char value in st)
{
Console.Write(value + " ");
}
Console.ReadKey();
}
}
}

5.队列Queue

  队列(Queue)代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Demos
{
class Program
{
static void Main(string[] args)
{
Queue q = new Queue(); q.Enqueue('A');
q.Enqueue('B');
q.Enqueue('C');
q.Enqueue('D'); Console.WriteLine("Current queue: ");//队列先进先出
foreach (char value in q)
Console.Write(value + " ");
Console.WriteLine();
q.Enqueue('V');//向 Queue 的末尾添加一个对象。
q.Enqueue('H');
Console.WriteLine("Current queue: ");
foreach (char value in q)
Console.Write(value + " ");
Console.WriteLine();
Console.WriteLine("Removing some values ");
char ch = (char)q.Dequeue();//移除并返回在 Queue 的开头的对象。
Console.WriteLine("The removed value: {0}", ch);
ch = (char)q.Dequeue();
Console.WriteLine("The removed value: {0}", ch);
Console.ReadKey(); }
}
}

5.点阵列(BitArray) 

  BitArray 类管理一个紧凑型的位值数组,它使用布尔值来表示,其中 true 表示位是开启的(1),false 表示位是关闭的(0)。当您需要存储位,但是事先不知道位数时,则使用点阵列。您可以使用整型索引从点阵列集合中访问各项,索引从零开始。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Demos
{
class Program
{
static void Main(string[] args)
{
// 创建两个大小为 8 的点阵列
BitArray ba1 = new BitArray();
BitArray ba2 = new BitArray();
byte[] a = { };
byte[] b = { };
// 把值 60 和 13 存储到点阵列中
ba1 = new BitArray(a);
ba2 = new BitArray(b);
// ba1 的内容
Console.WriteLine("Bit array ba1: 60");
for (int i = ; i < ba1.Count; i++)
{
Console.Write("{0, -6} ", ba1[i]);
}
Console.WriteLine(); // ba2 的内容
Console.WriteLine("Bit array ba2: 13");
for (int i = ; i < ba2.Count; i++)
{
Console.Write("{0, -6} ", ba2[i]);
}
Console.WriteLine(); BitArray ba3 = new BitArray();
ba3 = ba1.And(ba2); // ba3 的内容
Console.WriteLine("Bit array ba3 after AND operation: 12");
for (int i = ; i < ba3.Count; i++)
{
Console.Write("{0, -6} ", ba3[i]);
}
Console.WriteLine(); ba3 = ba1.Or(ba2);
// ba3 的内容
Console.WriteLine("Bit array ba3 after OR operation: 61");
for (int i = ; i < ba3.Count; i++)
{
Console.Write("{0, -6} ", ba3[i]);
}
Console.WriteLine(); Console.ReadKey();
}
}
}

C#中的6种常见的集合的更多相关文章

  1. 简单谈谈Python中的几种常见的数据类型

    简单谈谈Python中的几种常见的数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等 ...

  2. wpf企业级开发中的几种常见业务场景

    前阵子在公司弄个内部的进销存管理系统,从了解需求.系统设计到编码,大约耗费了两个月时间,后来公司有了其他的安排,这东西就算黄了.顺便吐槽一下,厂里的一些人说话真心不顾别人感受,邮件啥的没一句舒服的.不 ...

  3. SQL SERVER中的两种常见死锁及解决思路

    在sql server中,死锁都与一种锁有关,那就是排它锁(x锁).由于在同一时间对同一个数据库资源只能有一个数据库进程可以拥有排它锁.因此,一旦多个进程都需要获取某个或者同一个数据库资源的排它访问权 ...

  4. C语言中的几种常见排序算法

    1.冒泡排序法:如果有N个数,两两相邻进行比较,将最值沉入最后一位置,要进行N-1轮比较, 第一轮要比较N-1次,第2轮只要比较N-1-1次,因为第一次已经把最值沉入最后一位置,故 不需在进行比较一次 ...

  5. Java中9种常见的CMS GC问题分析与解决

    1. 写在前面 | 本文主要针对 Hotspot VM 中"CMS + ParNew"组合的一些使用场景进行总结.重点通过部分源码对根因进行分析以及对排查方法进行总结,排查过程会省 ...

  6. Android 四种常见的线程池

    引入线程池的好处 1)提升性能.创建和消耗对象费时费CPU资源 2)防止内存过度消耗.控制活动线程的数量,防止并发线程过多. 我们来看一下线程池的简单的构造 public ThreadPoolExec ...

  7. 四种常见的数据结构、LinkedList、Set集合、Collection、Map总结

    四种常见的数据结构:    1.堆栈结构:        先进后出的特点.(就像弹夹一样,先进去的在后进去的低下.)    2.队列结构:        先进先出的特点.(就像安检一样,先进去的先出来 ...

  8. SQL Server 存储过程中处理多个查询条件的几种常见写法分析,我们该用那种写法

    本文出处: http://www.cnblogs.com/wy123/p/5958047.html 最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种 ...

  9. JavaScript 中 4 种常见的内存泄露陷阱

    了解 JavaScript 的内存泄露和解决方式! 在这篇文章中我们将要探索客户端 JavaScript 代码中常见的一些内存泄漏的情况,并且学习如何使用 Chrome 的开发工具来发现他们.读一读吧 ...

随机推荐

  1. day31—CSS Reset 与页面居中布局

    转行学开发,代码100天——2018-04-16 报名的网易前端开发课程今天正式开课了,这也是毕业后首次付费进行的正式培训课程学习.以此,记录每天学习内容. 今天学了两个方面的知识: 1. CSS   ...

  2. sql 优化建议

    1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  3. (appium+python)UI自动化_02_appium启动手机app

    前提:需先安装配置好appium+python自动化环境,已配置好环境的小伙伴可以参考以下步骤启动Android app,具体步骤如下: 一.USB连接手机 (1)手机USB连接电脑 (2)手机打开开 ...

  4. 阅读笔记06-架构师必备最全SQL优化方案(2)

    四.基础优化 1.优化思路? 定位问题点吮吸:硬件-->系统-->应用-->数据库-->架构(高可用.读写分离.分库分表). 处理方向:明确优化目标.性能和安全的折中.防患未然 ...

  5. 阅读笔记05-架构师必备最全SQL优化方案(1)

    一.优化的哲学 1.优化可能带来的问题? 优化不总是对一个单纯的环境进行,还很可能是一个复杂的已投产的系统: 优化手段本来就有很大的风险,只不过你没能力意识到和预见到: 任何的技术可以解决一个问题,但 ...

  6. SEC6 - MySQL 查询语句--------------进阶2:条件查询

    # 进阶2:条件查询 /* 语法: select 查询列表 from 表名 where 筛选条件; 分类: 一.按照条件表达式筛选 条件运算符:> < = !=(等价于<>) ...

  7. 去JQUERY化

    时间 2016-05-17 12:43:59  OurJS 原文  http://ourjs.com/detail/573a9cec88feaf2d031d24fc 主题 jQuery 这是一篇使用原 ...

  8. MySQL错误信息语言设置为英文

    MySQL错误信息语言设置为英文 安装的wamp环境中,mysql的错误提示信息默认不是英语(大概是法语) 这里说下改为英语的过程 第一步 找到以下文件夹,确保里面可以看到各种"国际方言&q ...

  9. 洛谷 P3368 【模板】树状数组 2(区间加,单点查询)

    题目链接 https://www.luogu.org/problemnew/show/P3368 树状数组 最基础的用法:https://www.cnblogs.com/yinyuqin/p/1096 ...

  10. 如何学习 websocket ?

    如何学习 websocket ? 使用 HTML https://github.com/phoboslab/jsmpeg MPEG1 进行播放 https://w3c.github.io/media- ...