使用集合组织相关数据

一.集合概述

  特点:可动态扩容

  1.ArrayList(数组列表)

    类似于数组,可动态维护

    命名空间:System.Collections   

      此命名空间包含接口和类。这些接口和类定义各种对象的集合 

    1.ArrayList常用方法及属性

属性名称

说明

Count

获取ArrayList中实际包含的元素数

Capacity

获取ArrayList的容量

返回值类型

方法名称

说明

int

Add(Object value)

将对象添加到ArrayList的结尾处

void

RemoveAt(int index)

移除ArrayList指定索引处的元素

void

Remove(Object value)

从ArrayList中移除特定的对象

void

Clear()

从ArrayList中移除所有元素

bool

Contains(Object value)

判断ArrayList中是否包含特定对象

void

Insert(int index,Object value)

添加元素到ArrayList中的指定下标

      示例代码:

            #region 01.集合使用
            ArrayList list = new ArrayList();
            //1.1  扔数据进去   逻辑思维
            list.Add("罗振宇===时间的朋友===跨年演讲");
           
            list.Add("前HP CEO 卡莉·菲奥莉娜 康柏");
            list.Add("隔壁老王");
            list.Insert(1,"我是老二吧!");
            Console.WriteLine("集合中元素总量"+list.Count);
            Console.WriteLine("集合中集合容量" + list.Capacity); //容量

            //1.2  遍历集合
            foreach (string item in list) //自动迭代  有一个迭代器
            {
                Console.WriteLine(item);
            }
            //1.3  删除数据
            //方式一:下标
           // list.RemoveAt(0);
            //方式二:根据内容删除
            list.Remove("罗振宇===时间的朋友===跨年演讲");
            Console.WriteLine("==========删除后===============");
            foreach (string item in list) //自动迭代  有一个迭代器
            {
                Console.WriteLine(item);
            }
            //判定某个元素 是否在集合中
            bool flag=list.Contains("李小龙");
            if (flag)
            {
                Console.WriteLine("Exists");
            }
            else
            {
                Console.WriteLine("Not Exists");
            }
            #endregion    

    2.通过集合初始化器(Collection Initializers)构造集合

      通过集合初始化器,无须在代码中指定多个对该类Add()方法的调用,编译器会添加这些调用,从而节省了很多的编码工作

      示例代码:

            #region 02。集合初始化器
            ArrayList list2 = new ArrayList()   //集合初始化
            {
                new SE(){Name="张靓颖",Age=20}, //对象初始化器
                new SE()
            };
            #endregion

  2.Hashtable(双列集合)

    通常称为:哈希表,它的每个值都是一个键/值对

    命名空间:System.Collections

    常用属性及方法:

属性名称

说明

Count

获取包含在Hashtable中键/值对的数目

Keys

获取包含在Hashtable中键的集合

Values

获取包含在Hashtable中值的集合

返回值类型

方法名称

说明

void

Add(Object key,Object value)

将代言指定键和值的元素添加到Hashtable中

void

Remove(Object key)

从Hastable中移除带有指定键的元素

void

Clear()

从Hastable中移除所有元素

    ★对HashTable遍历三种方案:

           ☆:第一种方式,遍历所有的keys,通过key的值获取value

           ☆:第二种方式:遍历所有的value集合

           ☆:第三种方式,同时遍历key和value

    示例代码:

         #region 01.双列集合HashTable(哈希表)
            Hashtable table = new Hashtable();  //table中的一个item=key+value
            table.Add("ICBC", "工商银行");
            table.Add("ABC", "农业银行");
            table.Add("CBC","中国建设银行");

            //根据key获取value
            Object bankName=table["ICBC"];
            Console.WriteLine(bankName);
            Console.WriteLine("===============================");
            //遍历的手段
            //foreach  for 因为HashTable 只有key没有索引,for 通过下标取值
            //Value   方式一:通过Key取出Value
            foreach (Object key in table.Keys)
            {
                Console.WriteLine(key);
                //索引器
                Console.WriteLine(table[key]);
            }
            //直接Value,如果我们能拿到所有值的集合  。
            foreach (Object value in table.Values)
            {
                Console.WriteLine(value);    
            }
            //key+value 迭代  ,一次拿到的是key+value的组合
            foreach (DictionaryEntry item in table)
            {
                //Console.WriteLine("");
                Console.WriteLine(item.Key);
                Console.WriteLine(item.Value);
            }
           #endregion        

  3.集合扩充原理:(Cpcity)

    初始状态,容量为0

    开始出现,容量为4

    每次超过当前容量,容量为(当前容量*2)

    扩容的触发时机是在调用Add()方法的时候

    简单示例代码:    

int[] nums = new int[0];
int num = (nums.Lentght==0)?4:(nums.Lenght*2);

二.泛型和泛型集合

  1.泛型

    引入概念:集合参数类型

    可以最大限度地重用代码,保护类型的安全及提高性能

    List<T>,Dictionary<K,V>

            #region 01.泛型集合先导课程
            PM pm = new PM();

            SE s1 = new SE();

            SE s2 = new SE();

            ArrayList list = new ArrayList();
            list.Add(pm);
            list.Add(s1);
            list.Add(s2);

            foreach (Object item in list)
            {

            }

            //PM pmResult=(PM)list[0];
            //SE seResult1 = (SE)list[1];
            //SE seResult2 = (SE)list[2]; 
            #endregion    

  2.泛型集合List<T>

    代替ArrayList

    命名空间:System.Collection.Generic

    语法:

    List<T> 对象名 = new List<T>();
    //“<T>”中T可以对集合中元素类型进行约束

    示例代码:

            #region 02.泛型集合
            //<真实类型> 限定 Add()入参的类型  
            List<SE> list = new List<SE>();
            SE se=new SE();
            se.Name = "比尔·盖茨";

            SE se2 = new SE();
            se2.Name = "李彦宏";
            list.Add(se);
            list.Add(se2);

            foreach (SE item in list)
            {
                Console.WriteLine(item.Name);
            }
            #endregion

  3.泛型集合Dictionary<K,T>

    代替Hashtable

    命名空间:System.Collection.Generic

    语法:

      Dictionary<K,V> 对象名 = new Dictionary<K,V>
      //“<K,V>”中K表示集合中Key的类型,V表示Value的类型

    废话不多说,上代码:

            #region 03.双列集合  Dictionay<K,V>
            Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("ICBC","中国工商银行");

            dic.Add("ABC", "中国农业银行");

            dic.Add("CBC", "中国建设银行");

            //找一下 EBank 有没有在集合中
            bool flag=dic.ContainsKey("EBank");
            if (flag)
            {
                Console.WriteLine("存在");
            }
            else
            {
                Console.WriteLine("不存在");
            }

            //双列集合遍历方案
            //方式一:
            foreach (string key in dic.Keys)
            {
                Console.WriteLine(key);
                Console.WriteLine(dic[key]);
            }
            //方式二;直接获取Value
            foreach (string value in dic.Values)
            {
                Console.WriteLine(value);
            }
            //方式三:key+value =======item
            foreach (KeyValuePair<string,string> item in dic)
            {
                Console.WriteLine(item.Key);
                Console.WriteLine(item.Value);
            }


            #endregion

         KeyValuePair<TKey,TValue>是一个泛型结构,定义可设置或检索的键/值对。这部分就不多做结束,大家可以通过MSDN了解

★注:泛型集合可以作为类的一个属性,使用泛型集合必须实例化~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序你好

C# 语言中Lambda(拉姆达) 表达式介绍

894
来自专栏大内老A

从yield关键字看IEnumerable和Collection的区别

C#的yield关键字由来以久,如果我没有记错的话,应该是在C# 2.0中被引入的。相信大家此关键字的用法已经了然于胸,很多人也了解yield背后的“延迟赋值”...

2017
来自专栏大内老A

yield在WCF中的错误使用——99%的开发人员都有可能犯的错误[下篇]

昨天写了《yield在WCF中的错误使用——99%的开发人员都有可能犯的错误[上篇]》,引起了一些讨论。关于yield关键字这个语法糖背后的原理(C#编译器将它...

1788
来自专栏cs

c#知识点2.0 语句

主要说一下我认为比较重要的东西。 foreach循环 格式: foreach(类型 循环变量 in 变量的取值集合) 变量值集合类型必须是一个集合,而循环变...

3366
来自专栏mwangblog

C# 中的参数数组、引用参数和输出参数

673
来自专栏GreenLeaves

C# lambda表达式

学了N多久的委托,终于告一段落,现在可以开始lambda的学习之旅了,但是在说lambda之前必须先说下C#中的匿名方法. 1、匿名方法 下面是一个字符串拼接的...

1666
来自专栏C/C++基础

C++11委托构造函数

委托构造函数(Delegating Constructor)由C++11引入,是对C++构造函数的改进,允许构造函数通过初始化列表调用同一个类的其他构造函数,目...

711
来自专栏跟着阿笨一起玩NET

C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、SortedList类)

462
来自专栏GreenLeaves

C#核编之内建数据类型

这个随笔中的重点之一是说明:C#中所提供的关键字都是相应系统类型的简化符号(如int是System.Int32类型的简化符号) 一、内建数据类型与层级结构 所有...

2146
来自专栏james大数据架构

c#字符串操作方法实例

# 字符串是使用 string 关键字声明的一个字符数组。字符串是使用引号声明的,如下例所示: string s = "Hello, World!"; 字符串...

1898

扫描关注云+社区