C#每日一课(三十二)

40 篇文章 1 订阅

C#集合
集合Collection类,它是专用于数据存储和检索的类。
提供了对 stack(栈)、queue(队列)、list(列表)、hash table(哈希表)的支持
集合类都在命名空间System.Collection中
各个集合类:
1.ArrayList
它代表了可被单独索引的对象的有序集合。
可以替代数组,与数组不同的是,可以使用索引在指定的位置添加和移除项目,它是一个动态数组,会自动去调整它的大小。也可以在列表中进行动态内存增加、搜索、排序各项。

  • ArrayList常用的属性:
    Capacity:获取或设置ArrayList可以包含的元素个数
    Count:获取ArrayList中实际包含的元素个数
    IsFixedSize:获取一个值,表示ArrayList是否具有固定大小
    IsReadOnly:获取一个值,表示ArrayList是否只读
    Item:获取或设置指定索引处的元素
  • ArrayList常用方法:
    public virtual int Add(object value); 在ArrayList的末尾添加一个对象
    public virtual void AddRange(ICollection c); 在ArrayList的末尾添加ICollection元素
    public virtual void Clear(); 从ArrayList中移除所有的元素
    public virtual bool Contains(object item); 判断某个元素是否在ArrayList中
    public virtual ArrayList GetRange(int index,int count); 返回一个ArrayList,表示源ArrayList中元素的子集
    public virtual int IndexOf(object); 返回某个值在ArrayList中第一次出现的索引,索引从0开始计算
    public virtual void Insert(int index,object value); 在ArrayList的指定索引处,插入一个元素
    public virtual void InsertRange(int index,ICollection c); 在ArrayList的指定索引处,插入某个集合的元素
    public virtual void Remove(object obj); 从ArrayList中移除第一次出现的指定对象
    public virtual void RemoveAt(int index); 移除ArrayList的指定索引处的元素
    public virtual void RemoveRange(int index,int count); 从ArrayList中移除某个范围的元素
    public virtual void Reverse(); 逆转ArrayList中元素的顺序
    public virtual void SetRange(int index,ICollection c); 复制某个集合的元素到ArrayList中某个范围的元素上
    public virtual void Sort(); 对ArrayList中元素进行排序
    public virtual void TrimToSize(); 设置容量为ArrayList中元素的实际个数

使用Visual Studio新建C#控制台应用程序chapter23_001,测试ArrayList的相关用法
在生成的工程Main方法中加入如下代码:

 ArrayList list = new ArrayList();
            Console.WriteLine("添加元素,以q结束录入!");
            string temp = "";
            while ((temp = Console.ReadLine()) != "q")
            {
                list.Add(temp);
            }
            Console.WriteLine("------------ArrayList录入结果---------------");
            foreach (string str in list)
            {
                Console.Write(str + "   ");
            }
            Console.WriteLine();
            Console.WriteLine("-------------ArrayList相关属性--------------");
            Console.WriteLine("Capacity:{0}",list.Capacity);
            Console.WriteLine("Count:{0}",list.Count);
            Console.WriteLine("-------------ArrayList排序--------------");
            list.Sort();
            foreach (string str in list)
            {
                Console.Write(str + "   ");
            }
            Console.WriteLine();
            Console.ReadKey();

编译运行结果如下:
运行结果

2.Hashtable
Hashtable代表了一系列基于键的哈希代码组织起来的键值对,它使用键来访问集合中对应的元素。

  • Hashtable常用属性:
    Count:获取Hashtable中包含的键值对个数
    IsFixedSize:获取一个值,表示Hashtable是否具有固定大小
    IsReadOnly:获取一个值,表示Hashtable是否只读
    Item:获取或设置与指定的键相关的值
    Keys:获取一个ICollection,包含Hashtable中的键
    Values:获取一个ICollection,包含Hashtable中的值
  • Hashtable常用方法:
    public virtual void Add(object key,object value); 向Hashtable中添加一个带有指定键和值的元素
    public virtual void Clear(); 从Hashtable中移除所有元素
    public virtual bool ContainsKey(object key); 判断Hashtable是否包含指定的键
    public virtual bool ContainsValue(object value); 判断Hashtable是否包含指定的值
    public virtual void Remove(object key); 从Hashtable中移除带有指定键的元素

使用Visual Studio新建c#控制台应用程序chapter23_002
在生成的工程Main方法中加入如下代码进行测试:

Hashtable ht = new Hashtable();
            string value;
            ArrayList listKey = new ArrayList();
            listKey.Add("ID");
            listKey.Add("name");
            listKey.Add("school");
            listKey.Add("addr");
            //Console.WriteLine("录入相关值信息:");
            int count = 1;
            while (true)
            {
                Console.WriteLine("录入n表示继续,q表示退出");
                string flag = Console.ReadLine();
                if (flag == "n")
                {
                    for (int i = 0; i < listKey.Count; i++)
                    {
                        Console.Write("请输入" + listKey[i] + ":");
                        ht.Add(listKey[i] + "_" + count.ToString(), Console.ReadLine());
                    }
                    count++;
                }
                if (flag == "q")
                {
                    break;
                }
                if (flag != "q" && flag != "n")
                {
                    continue;
                }
            }

            //读取Hashtable中的数据
            ICollection key = ht.Keys;
            foreach (string k in key)
            {
                Console.WriteLine(k + ": " + ht[k]);
            }
            Console.ReadKey();

编译运行后的结果如下:
运行结果

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

  • SortedList常用属性:
    Capacity:获取或设置SortedList的容量
    Count:获取SortedList中的元素个数
    IsFixedSize:获取一个值,表示SortedList是否具有固定大小
    IsReadOnly:获取一个值,表示SortedList是否只读
    Item:获取或调置SortedList中指定的键相关的值
    Keys:获取SortedList中的键
    Values:获取SortedList中的值
  • SortedList常用方法:
    public virtual void Add(object key,object value); 向SortedList添加一个带有指定的键和值的元素
    public virtual void clear(); 从SortedList中移除所有元素
    public virtual bool ContainsKey(object key); 判断SortedList是否包含指定的键
    public virtual object GetByIndex(int index); 获取SortedList的指定索引处的值
    public virtual object GetKey(int index); 获取SortedList的指定索引处的键
    public virtual IList GetKeyList(); 获取SortedList中的键
    public virtual IList GetValueList(); 获取SortedList中的值
    public virtual int IndexOfKey(object key); 返回SortedList中指定键的索引,索引从0开始计算
    public virtual int IndexOfValue(object value); 返回SortedList中的指定值第一次出现的索引,索引从0开始
    public virtual void Remove(object key); 从SortedList中移除带有指定键的元素
    public virtual void RemoveAt(int index); 移除SortedList的指定索引处的元素
    public virtual void TrimToSize(); 设置容量为SortedList中元素的实际个数

使用Visual studio新建C#控制台应用程序 chapter23_003
在Main方法中加入哪下代码进行测试(相比如chapter23_002只是从Hashtable转为SortedList)

SortedList sl = new SortedList();
            string value;
            ArrayList listKey = new ArrayList();
            listKey.Add("ID");
            listKey.Add("name");
            listKey.Add("school");
            listKey.Add("addr");
            //Console.WriteLine("录入相关值信息:");
            int count = 1;
            while (true)
            {
                Console.WriteLine("录入n表示继续,q表示退出");
                string flag = Console.ReadLine();
                if (flag == "n")
                {
                    for (int i = 0; i < listKey.Count; i++)
                    {
                        Console.Write("请输入" + listKey[i] + ":");
                        sl.Add(listKey[i] + "_" + count.ToString(), Console.ReadLine());
                    }
                    count++;
                }
                if (flag == "q")
                {
                    break;
                }
                if (flag != "q" && flag != "n")
                {
                    continue;
                }
            }

            //读取Hashtable中的数据
            ICollection key = sl.Keys;
            foreach (string k in key)
            {
                Console.WriteLine(k + ": " + sl[k]);
            }
            Console.ReadKey();

编译运行结果如下:
运行结果

4.Stack
堆栈Stack代表了一个后进先出的对象集合。
就像一个管子只从一头进出元素,添加一个元素时称为推入,移除一个元素时称为弹出,从一头进出则只能是后进先出。

  • Stack的常用属性:
    Count:获取Stack中包含的元素个数
  • Stack的常用方法以:
    public virtual void Clear(); 从Stack中移除所有元素
    public virtual bool Contanins(object obj); 判断某个元素是否在Stack当中
    public virtual object Peek(); 返回Stack的顶部的对象,但不移除它
    public virtual object Pop(); 移除并返回Stack的顶部对象
    public virtual void Push(object obj); 向Stack的顶部添加一个对象
    public virtual object[] ToArray(); 复制Stack到一个新的数组中

使用Visual Studiou新建C#控制台应用程序chapter23_004
在新生成的工程Main方法中添加如下代码:

 Stack st = new Stack();
            //向Stack的顶部添加元素
            st.Push('e');
            st.Push('i');
            st.Push('x');

            Console.WriteLine("Stack中元素:");
            foreach (char c in st)
            {
                Console.Write(c + " ");
            }
            Console.WriteLine();
            Console.WriteLine("Stack当前顶部元素:{0}",st.Peek());
            //移出元素
            int count = st.Count;
            for (int i = 0; i < count; i++)
            {
                Console.Write(st.Pop());
            }
            Console.WriteLine();
            //当前Stack中元素个数
            Console.WriteLine("Stack中当前元素个数:{0}",st.Count);
            Console.ReadKey();

编译运行后的结果如下:
运行结果

5.Queue
队列Queue,代表了一个先进先出的对象集合。当需要对各项进行先进先出的访问时,则使用队列,它就相当于一个两头空的水管,一头用来添加数据,一头用来做输出数据。当在列表中添加一项,称为入队,当从列表中移除一项时,称为出队。

  • Queue常用属性:
    Count:获取Queue中包含的元素个数
  • Queue常用方法:
    public virtual void Clear(); 从Queue中移除所有元素
    public virtual bool Contains(object obj); 判断某个元素是否在Queue中
    public virtual object Dequeue(); 移除并返回Queue开头的对象
    public virtual void Enqueue(); 向Queue的末尾添加一个对象
    public virtual object[] ToArray(); 复制Queue到一个新的数组中
    public virtual void TrimToSize(); 设置容量为Queue中元素的实际个数

使用Visual Studio新建C#控制台应用程序chapter23_005
在生成的项目的Main方法中添加如下代码进行测试:

Queue q = new Queue();
            q.Enqueue('x');
            q.Enqueue('i');
            q.Enqueue('e');
            Console.WriteLine("队列信息:");
            foreach (char c in q)
                Console.Write(c + " ");
            Console.WriteLine();
            int count = q.Count;
            Console.WriteLine("--------移除无素--------");
            for(int i = 0; i < count; i++)
            {
                Console.Write(q.Dequeue());
            }
            Console.WriteLine();
            Console.WriteLine("移除元素后,队列元素个数:{0}",q.Count);
            Console.ReadKey();

编译运行结果如下:
运行结果

6.BitArray
BitArray类,管理的是一个紧凑型的位值数组,使用布尔值来表示,其中true表示位开启(1),否则为false表示位关闭(0)。

  • BitArray常用属性:
    Count:获取BitArray中包含的元素个数
    IsReadOnly:获取一个值,表示BitArray是否只读
    Item:获取或设置BitArray中指定位置的的值
    Length:获取或设置BitArray中的元素个数
  • BitArray常用方法:
    public BitArray And(BitArray value); 对当前的BitArray中的元素和指定的BitArray中的相对应的元素执行按位与操作
    public bool Get(int index); 获取BitArray中指定位置的位的值
    public BitArray Not(); 把当前的BitArray中的位值反转,以便设置为true的元素变为false,设置为false的元素设置为true
    public BitArray Or(BitArray value); 对当前的BitArray中的元素和指定的BitArray中的相对应的元素执行按位操作
    public void Set(int index,bool value); 把BitArray中指定位置设置为指定值
    public void SetAll(bool value); 把BitArray中的所有位设置为指定的值
    public BitArray Xor(BitArray value); 对当前的BitArray中的元素和指定的BitArray中的相对应元素执行按位异或操作
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值