http://blog.csdn.net/hcw_peter/article/details/3980723

集合分为非泛型集合和泛型集合 ,泛型集合可以指定放入集合中的类型。

一、非泛性集合

引用命名空间

using System.Collections;

 ArrayList类

一个动态可变数组,

           ArrayList aList = new ArrayList();
//将对象添加到 ArrayList 的结尾处
aList.Add("aaa");
aList.Add("bbb");
aList.Add("ddd");
aList.Add("eee"); //获取 ArrayList 中实际包含的元素数
Console.WriteLine("获取 ArrayList 中实际包含的元素数");
int i = aList.Count;
Console.WriteLine("alist现有" + i + "个元素"); //通过索引下标获取元素值
Console.WriteLine("通过索引下标获取元素值");
object obj = aList[];
Console.WriteLine(obj); //判断是否包含指定元素,返回布尔值
Console.WriteLine("判断是否包含指定元素,返回布尔值");
bool b = aList.Contains("aaa");
Console.WriteLine("是否包含此元素:"+b); //将元素插入到指定索引处
Console.WriteLine("将元素插入到指定索引处");
aList.Insert(, "ccc");
Console.WriteLine(aList[]); //遍历aList
Console.WriteLine("遍历aList");
foreach (var a in aList)
{
Console.Write("遍历aList=" + a + ",");
}
Console.WriteLine(""); //将元素顺序反转
Console.WriteLine("将元素顺序反转");
aList.Reverse();
foreach (var a in aList)
{
Console.Write("遍历aList=" + a + ",");
}
Console.WriteLine(""); //将指定范围中的元素反转
Console.WriteLine("将指定范围中的元素反转,反转从1索引开始反转4个元素");
aList.Reverse(, );
foreach (var a in aList)
{
Console.Write("遍历aList=" + a + ",");
}
Console.WriteLine(""); //排序
Console.WriteLine("排序");
aList.Sort();
foreach (var a in aList)
{
Console.Write("遍历aList=" + a + ",");
}
Console.WriteLine(""); //移除指定元素,如果没有此元素不会报错
Console.WriteLine("移除指定元素,如果没有此元素不会报错");
aList.Remove("eee");
foreach (var a in aList)
{
Console.Write("遍历aList=" + a + ",");
}
Console.WriteLine(""); //移除指定下标元素
Console.WriteLine("移除指定下标元素");
aList.RemoveAt();
foreach (var a in aList)
{
Console.Write("遍历aList=" + a + ",");
}
Console.WriteLine(""); //移除指定范围元素
Console.WriteLine("移除指定下标元素,从0索引开始移除1个元素");
aList.RemoveRange(,);
foreach (var a in aList)
{
Console.Write("遍历aList=" + a + ",");
}
Console.WriteLine(""); //清除所有元素
aList.Clear();
Console.WriteLine("alist现有" + aList.Count + "个元素");
Console.ReadKey();
//从目标数组的开头开始,将整个 ArrayList 复制到兼容的一维 Array
CopyTo(Array)
//从目标数组的指定索引处开始将整个 ArrayList 复制到兼容的一维 Array
CopyTo(Array, Int32)

 Hashtable 类

存储一组键值对,同过键快速查找对应的值

//获取包含在 Hashtable 中的键/值对的数目
int count = htable.Count;
//从 Hashtable 中移除带有指定键的元素
htable.Remove();
//从 Hashtable 中移除所有元素。
htable.Clear();
//确定 Hashtable 是否包含特定键
bool b1=htable.Contains();
//确定 Hashtable 是否包含特定键
bool b2=htable.ContainsKey();
//确定 Hashtable 是否包含特定值
bool b3=htable.ContainsValue("李");
//遍历htable.Keys,或者htable.Values
foreach (object o in htable.Values)
{
Console.WriteLine(o); ;
}
//遍历哈希表只能用foreach来遍历,因为Hashtable不能用索引访问
foreach (DictionaryEntry ht in htable)
{
Console.WriteLine(ht.Key); //de.Key对应于keyvalue键值对key
Console.WriteLine(ht.Value); //de.Key对应于keyvalue键值对value
}

Queue

 Queue队列就是先进先出。它并没有实现 IList,ICollection。所以它不能按索引访问元素,不能使用Add和Remove。下面是 Queue的一些方法和属性

  Enqueue():在队列的末端添加元素

  Dequeue():在队列的头部读取和删除一个元素,注意,这里读取元素的同时也删除了这个元素。如果队列中不再有任何元素。就抛出异常

  Peek():在队列的头读取一个元素,但是不删除它

  Count:返回队列中的元素个数

  TrimExcess():重新设置队列的容量,因为调用Dequeue方法读取删除元素后不会重新设置队列的容量。

  Contains():确定某个元素是否在队列中

  CopyTo():把元素队列复制到一个已有的数组中

  ToArray():返回一个包含元素的新数组

二、泛型集合

using System.Collections.Generic;

List<T> 类

(1)在决定使用IList<T> 还是使用ArrayList类(两者具有类似的功能)时,记住IList<T> 类在大多数情况下执行得更好并且是类型安全的。

(2)如果对IList<T> 类的类型 T 使用引用类型,则两个类的行为是完全相同的。但是,如果对类型 T 使用值类型,则需要考虑实现和装箱问题。

添加到ArrayList 中的任何引用或值类型都将隐式地向上强制转换为Object。如果项是值类型,则必须在将其添加到列表中时进行装箱操作,在检索时进行取消装箱操作。强制转换以及装箱和取消装箱操作都会降低性能;在必须对大型集合进行循环访问的情况下,装箱和取消装箱的影响非常明显。---微软

同arraylist

初始化赋值

    class Program
{
static void Main(string[] args)
{
List<Student> stu1 = new List<Student>
{
new Student{ age=,name="tom" },
new Student{ age=,name="li" },
new Student{ age=,name="meimei" },
};
}
}
class Student
{
public int age { get; set; }
public string name { get; set; }
}

list.AddRange(数组或a,b,c) 的方式添加多个元素,动态获取数据并存入时方便

Dictionary<TKey, TValue> 类

同 hashtable

(15)C#集合的更多相关文章

  1. java 15 - 8 集合框架(并发修改异常的产生原因以及解决方案)

    问题?   我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现.  面试题: Concu ...

  2. java 15 -3 集合的遍历的练习

    练习:用集合存储5个动物对象,并把动物对象进行遍历. 分析: A:创建动物类 a:无参构造方法 b:有参构造方法 c:get.set方法 B:创建集合对象 a:Collection animal = ...

  3. java 面向对象编程-- 第15章 集合框架

    1.  集合特点:元素类型不同.集合长度可变.空间不固定 2.  java中对一些数据结构和算法进行了封装即集合.集合也是一种对象,用于存储.检索.操作和传输对象. 3.  JCF(Java Coll ...

  4. JAVA基础知识总结15(集合容器)

    集合框架:用于存储数据的容器. 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合和数组的区别: 1: ...

  5. java 15 - 9 集合框架之 栈、队列、数组 和 链表

  6. JavaSE_ 集合框架 总目录(15~18)

    JavaSE学习总结第15天_集合框架1 15.01 对象数组的概述和使用15.02 对象数组的内存图解15.03 集合的由来及与数组的区别15.04 集合的继承体系图解15.05 Collectio ...

  7. JavaSE学习总结第15天_集合框架1

      15.01 对象数组的概述和使用 public class Student { // 成员变量 private String name; private int age; // 构造方法 publ ...

  8. Java 集合系列目录(Category)

    下面是最近总结的Java集合(JDK1.6.0_45)相关文章的目录. 01. Java 集合系列01之 总体框架 02. Java 集合系列02之 Collection架构 03. Java 集合系 ...

  9. JavaEE基础(十八)/集合

    1.集合框架(Map集合概述和特点) A:Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 B:Map接口和Collection接口的不同 ...

随机推荐

  1. 孤荷凌寒自学python第五十二天初次尝试使用python读取Firebase数据库中记录

    孤荷凌寒自学python第五十二天初次尝试使用python读取Firebase数据库中记录 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数 ...

  2. java实现最大堆

    优先队列 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有最高级先出 (first in, ...

  3. Opencv3.1.0安装包

    这个资源是Opencv3.1.0安装包,包括Windows软件包,Android软件包,IOS软件包,还有opencv的源代码:需要的下载吧. 点击下载

  4. CentOS 6.3下安装Vsftp,虚拟用户

    CentOS 6.3下安装Vsftp,虚拟用户一.安装:1.安装Vsftpd服务相关部件:[root@linuxidc.com ~]# yum install vsftpd*Dependencies ...

  5. Linux命令 -文件操作类

    声明:本文所涉及到的Linux命令均为最常见的用法,未列举之参数,自行查阅man 1.ls    查看文件与目录 -a 打印全部的文件,包括隐藏文件 -l 列表打印,数据项包括文件属性,大小和权限等 ...

  6. 绑定域名到 GitHub Pages

    简介 我在阿里云上注册了一个新域名:yuanzb.com,我已经在GitHub Pages上建立了自己的博客:http://yuanzb.github.io/yuanzb/.现在我希望将yuanzb. ...

  7. idiots

    idiots 题目描述 给定 $n$ 个长度分别为 $a_i$ 的木棒,问随机选择 $3$ 个木棒能够拼成三角形的概率. 输入格式 第一行一个正整数 nn. 第二行 nn 个正整数,第 ii 个数表示 ...

  8. 【CF Round 439 E. The Untended Antiquity】

    time limit per test 2 seconds memory limit per test 512 megabytes input standard input output standa ...

  9. EAR、JAR、WAR(IT)

    EAR文件包括整个项目,内含多个ejb module(jar文件)和web module(war文件)   JAR.WAR.EAR.在文件结构上,三者并没有什么不同,它们都采用zip或jar档案文件压 ...

  10. firefox解决flash崩溃

    1.地址栏输入 about:config 2.查找dom.ipc.plugins.flash.subprocess.crashreporter.enabled 更改为false