C#之入门总结_集合_10

引入StringBuilder的概念

 static void Main(string[] args)
        {
            Stopwatch sw = new Stopwatch();
            string ret = string.Empty;
            StringBuilder sb = new StringBuilder();
            sw.Start();
            for (int i = 0; i < 100000000; i++)
            {
                //ret += i;
                sb.Append(i);
            }
            sw.Stop();
            Console.WriteLine("总时间是:{0}",sw.Elapsed);
            //Console.WriteLine(ret);
        }

集合四大功能,增 删 改 查 .

在前面的章节中讲解过数组可以保存多个对象,但在某些情况下无法确定到底需要保存多少个对象,由于数组的长度不可变,因此数组将不再适用。例如要保存一个学校的学生信息,由于不停有新生来报到,同时也有学生离开学校,这时学生的数目很难确定。为了保存这些数目不确定的对象,C#中提供了一系列特殊的类,这些类可以存储任意类型的对象,并且长度可变,它们统称为集合。
C#中集合可分为泛型集合和非泛型集合,二者均间接实现了 IEnumerable 接口。泛型集合位于 System.Collections.Generic 命名空间,它只能存储同一种类型的对象,其中最常用的是List泛型集合和Dictionary泛型集合。非泛型集合位于System.Collections命名空间,它可以存储多种类型的对象,其中最常用的是ArrayList集合和Hashtable集合。

非泛型:弱类型

支持接受一切类型的元素,但遍历操作的时候会涉及到类型的转换,可能会异常.中间涉及拆装箱操作也比较耗时.

Arraylist

ArrayList list = new ArrayList();
            //获取集合元素的数量
            Console.WriteLine(list.Capacity);
            Console.WriteLine(list.Count);
            //向集合中添加数据
            list.Add(2);
            Console.WriteLine(list.Count);
            Console.WriteLine(list.Capacity);
            list.Add(3);
            list.Add(8);
            list.Add(5);
            list.Add(6);
            list.Add(7);

           Console.WriteLine(list.Capacity);
            list.Add(new Student());
            list.AddRange(list);
            bool ret = list.Contains(100);
            Console.WriteLine(ret);
            ArrayList arraylist = list.GetRange(1, 3);
            从list集合里提取元素组成新集合  从下标为1元素开始提取,提取三个元素
            3 4 5//IEnumerator GetEnumerator(int index, int count);
            foreach  是对集合做修改  遍历操作  禁止对foreach做删除操作
            foreach (var item in arraylist)
            {
                Console.WriteLine(item);
            }
            int index = list.IndexOf(4);
            找出集合里元素所对应的索引
            Console.WriteLine(index);
            list.Insert(1, 100);
            从索引为1的位置插入100;
            list.Remove(100);
            把集合中为100的元素删除
            list.RemoveAt(1);
            把索引为1的元素从集合删除
            list.Reverse();
            //将集合进行反转
            list.Sort();
            list.Reverse();
            升序排序
            Console.WriteLine("----------");
            foreach (var item in list)
            {
                Console.WriteLine(item);

Hashtable

           //在 Hashtable 这样的集合中 存储的顺序是乱序的
            Hashtable ht = new Hashtable();
            ht.Add("北京","重度雾霾");
            ht.Add("上海", "梅雨");
            ht.Add("郑州","霾");
            Console.WriteLine(ht["北京"]);
            ht["石家庄"] = "123";
            bool ret = ht.Contains("石家庄");
            Console.WriteLine(ret);
            //ht.Remove("郑州");
            ret = ht.Contains("郑州");
            Console.WriteLine(ret);
            foreach (var item in ht.Keys)
            {
                Console.WriteLine(item +"  "+ht[item]);
            }

Add,添加元素到集合,

Clear.清除所有元素.

Contains(object key).判断是否包含指定的键(键是唯一的),

ContainsVaiue(object value)判断是否包含指定的值(值不是唯一的),

Remove.(object key)移除指定的键和其匹配的值,

StringBuilder

 static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();;
            Console.WriteLine(sb.Capacity);
            sb.Append("12");
            sb.Append(12);
            sb.Append(new Student());
            sb.AppendFormat("{0}***{1}***{2}", 12, 13, 45);
            sb.Insert(0, "YY");
            sb.Remove(0, 2);
            sb.Replace("1991", "1998");
            sb.Replace("19", "2000", 4, 4);
            Console.WriteLine(sb.GetHashCode());
            Console.WriteLine(sb.Capacity);
            Console.WriteLine(sb.Append(sb));
            Console.WriteLine(sb);
        }

Append()添加一切元素,

AppendFormat()添加一个Format类型元素,

Insert(index,valua)将元素插入到指定的索引,

Remove(index,value)将指定索引的元素移除,

Replace(object,object)将元素1替换成元素2,

Replace(1234)要替换的字符串,替换的字符串或空,此示例中子字符串开始的位置,子字符串的长度.


泛型:强类型,支持编辑时的检查,只接受一种类型的元素例如<int>.

List<>


        static void Test01()
        {
            //ArrayList list = new ArrayList();
            Add方法的参数类型是object类型 在传递参数的时候整型1会转化成object类型  这样属于装箱操作
            //list.Add(1);
            如果实现  list[0] + 2  得到正确的结果  要将list[0]转化成int类型  也就是说要进行拆箱操作  
            //Console.WriteLine((int)list[0] + 2);
            //泛型结合在声明的时候已经确定了里面的元素类型
            List<string> list = new List<string>();
            //里面的传入的数据类型只能和声明时定义的类型保持一致
            //泛型能在编译时,提供强大的类型检查,减少数据类型之间的显示转化、装箱操作和运行时的类型检查。
            list.Add("C#编程之道");
            list.Add("C#从入门到精通");
            list.AddRange(list);
            Console.WriteLine(list.Count);
            bool ret = list.Contains("C#编程之道");
            Console.WriteLine(ret);
            int index = list.IndexOf("C#从入门到精通");
            Console.WriteLine(index);
            //从0开始查找,找到元素的下标
             index = list.IndexOf("C#从入门到精通", 2);
            //2从第二个元素开始查找;
            Console.WriteLine(index);
            List<int> numList = new List<int>();
            numList.Add(1);
            numList.Add(2);
            numList.Add(5);
            numList.Add(1);
            numList.Add(2);
            numList.Add(2);
            numList.Add(4);
            List<int> newList = numList.GetRange(0, numList.Count);
            //numList.GetRange得到numList的浅源副本,可以理解为把原来的集合赋到新的集合,原来的集合不变
            //0代表从下标为0的开始
            index = -1;
            //记录查找元素的数量
            int count = 0;
            while (newList.IndexOf(2) != -1)
            {
                index = newList.IndexOf(2);
                count++;
                newList.RemoveAt(index);
            }
            Console.WriteLine(count);
            //Console.WriteLine("-------------------------");
            //foreach (var item in numList)
            //{
            //    Console.WriteLine(item);
            //}
        }
    }

Add.添加,

AddRange.将指定元素添加到末尾,

Contains.判断是否包含某元素,

IndexOf(object,index)从指定索引开始寻找并返回找到的第一个索引,否则返回-1,

GetRange(index,count)从索引开始复制count数量的元素到一个子类中.次方法一般用于辅助之后进行操作防止元数据被更改.

RemovrAt(index)移除制定所引出的元素

Dictionary

 static void Test01()
        {
            Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("张杰", "高飞");
            dic.Add("刘欢", "好汉歌");
            //在一个字典中 键是唯一的
            //在一个字典中不同的键可以对应相同的值
            dic.Add("周杰伦", "青花瓷");
            dic.Add("刘英", "青花瓷");
            bool key = dic.ContainsKey("周杰伦");
            Console.WriteLine(key);
            bool value = dic.ContainsValue("好汉歌");
            Console.WriteLine(value);
            KeyCollection keys = dic.Keys;
            //dic.Remove("刘英");
            foreach (var item in keys)
            {
                Console.WriteLine(item);
            }
 }
        static void Test02()
        {
            Dictionary<string, Book> books = new Dictionary<string, Book>();
            books.Add("0000000",new Book("C#编程之道",56,"xx"));
            books.Add("0000001", new Book("C#从入门到精通", 98, "yy"));
            books.Add("0000002", new Book("C#从入门到放弃", 2, "zz"));
            foreach (var item in books)
            {
                Console.WriteLine(item.Key +" " + item.Value.Price);
            }
   static void Test03()
        {
            SortedDictionary<string, string> dic = new SortedDictionary<string, string>();
            dic.Add("张杰", "高飞");
            dic.Add("刘欢", "好汉歌");
            //在一个字典中 键是唯一的
            //在一个字典中不同的键可以对应相同的值
            dic.Add("周杰伦", "青花瓷");
            dic.Add("刘英", "青花瓷");
            dic.Add("asdef", "青花瓷");
            dic.Add("asdeh", "青花瓷");
            bool key = dic.ContainsKey("周杰伦");
            Console.WriteLine(key);
            bool value = dic.ContainsValue("好汉歌");
            Console.WriteLine(value);
            foreach (KeyValuePair<string,string> item in dic)
            {
                //这里是已经排序排好了的
                Console.WriteLine(item.Key);
            }
        }
HashSet:不能添加相同的元素,会默认删除.

  static void Main(string[] args)
        {
            HashSet<int> hs = new HashSet<int>();
            //不可以有相同元素
            //hs.Add(1);
            //Console.WriteLine(hs.Count);
            //hs.Add(2);
            //Console.WriteLine(hs.Count);
            //hs.Add(1);
            //Console.WriteLine(hs.Count);
            Random random = new Random();
            while (hs.Count < 100)
            {
                hs.Add(random.Next(1, 101));
            }

            foreach (var item in hs)
            {
                Console.WriteLine(item);
            }
    栈

        void Test()
        {
            Queue queue = new Queue();
            //EnterQueue  入队
            queue.Enqueue(1);
            queue.Enqueue(2);
            queue.Enqueue(3);
            //DeleteQueue
            queue.Dequeue();
            //peek 不影响队列中的元素的
            object obj = queue.Peek();
            Console.WriteLine(obj + "   ++++");
            foreach (var item in queue)
            {
                Console.WriteLine(item);
            }
        }
  class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Test02(30, 26));
        }

        static void Test()
        {
            //FILO   first in last out
            Stack stack = new Stack();
            //将数据压入到栈
            stack.Push(1);
            stack.Push(2);
            stack.Push(3);
            //Console.WriteLine(stack.Count);
            //弹出栈顶数据   就是删除栈顶元素
            stack.Pop();
            //获取栈顶元素
            object numberObj = stack.Peek();
            Console.WriteLine(numberObj);
            foreach (var item in stack)
            {
                Console.WriteLine(item);
            }
        }
        static string Test02(int number,int baseNumber)
        {
            Stack<char> statck = new Stack<char>();
            while (number/baseNumber !=0)
            {
                statck.Push( (char)(number % baseNumber +'a'));
                number /= baseNumber;
            }
            statck.Push((char)(number + 'a'));
            return new string(statck.ToArray());
        }

    队列    

  void Test()
        {
            Queue queue = new Queue();
            //EnterQueue  入队
            queue.Enqueue(1);
            queue.Enqueue(2);
            queue.Enqueue(3);
            //DeleteQueue
            queue.Dequeue();
            //peek 不影响队列中的元素的
            object obj = queue.Peek();
            Console.WriteLine(obj + "   ++++");
            foreach (var item in queue)
            {
                Console.WriteLine(item);
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值