使用集合组织相关数据

一.集合概述

  特点:可动态扩容

  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 条评论
登录 后参与评论

相关文章

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

在C#中ParameterizedThreadStart和ThreadStart区别

751
来自专栏GreenLeaves

C#核编之内建数据类型

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

2346
来自专栏林德熙的博客

C# 枚举转字符串 枚举转字符串字符串转枚举

如果把一个枚举转字符串,那么如何把字符串转枚举?可以使用 Enum.Parse 不过这个方法可以会抛异常,所以使用需要知道字符串是可以转

1981
来自专栏GreenLeaves

C# 自定义类型通过实现IFormattable接口,来输出指定的格式和语言文化的字符串(例:DateTime)

在开发一些国际化的应用时,应用程序需要调用与当前线程不同的语言文化来格式化字符串.

1163
来自专栏二进制文集

JSON Java 解析

要使程序可以运行必须引入JSON-lib包——org.json.jar包。综合来看,这个JAR包比较好用。

1152
来自专栏知识分享

C#抽象类与抽象方法--就是类里面定义了函数而函数里面什么都没有做的类

看一下代码应该就可以了 using System; using System.Collections.Generic; using System.Linq; u...

2753
来自专栏Java与Android技术栈

Java8新的异步编程方式 CompletableFuture(二)

上一篇文章,讲述了Future模式的机制、缺点,CompletableFuture产生的由来、静态工厂方法、complete()方法等等。

2081
来自专栏菩提树下的杨过

数据结构C#版笔记--双向链表(DbLinkList)

这是数据结构C#版笔记--线性表(Data Structure)之单链表(LinkList)的继续,对于双向链接,节点上除了Next属性外,还要有Prev属性用...

23910
来自专栏angularejs学习篇

ref和out的区别在c#中 总结

520
来自专栏技术博客

一步一步学Linq to sql(一):预备知识

  Linq to sql(或者叫DLINQ)是LINQ(.NET语言集成查询)的一部分,全称基于关系数据的 .NET 语言集成查询,用于以对象形式管理关系数据...

881

扫码关注云+社区