集合ArrayList

  

System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表、队列、位数组、哈希表和字典)的集合

System.Collections.Generic 命名空间包含定义泛型集合的接口和类,泛型集合允许用户创建强类型集合,它能提供比非泛型强类型集合更好的类型安全性和性能

System.Collections.Specialized 命名空间包含专用的和强类型的集合,例如,链接的列表词典位向量以及只包含字符串的集合

 

常用的集合ArrayList;特殊集合一般会用到Queue队列集合、Stack栈集合还有Hashtable哈希表集合。

 

集合不同于数组,是一组可变数量元素的组合,这些元素可能共享某些特征,需要以某种操作方式一起进行操作。一般来说,这些元素的类型是相同的。

 

集合与数组的区别数组连续的、同一类型数据的一块区域,而集合可以是不连续的、多种数据类型

 

 

ArrayList集合

 

 

相同点:

 

  (1)两者都实现了IListICollectionIEnumerable接口

 

  (2)两者都可以使用整数索引访问集合中的元素,包括读取和赋值,且集合中的索引都从0开始

 

不同点:

 

  (1)ArrayList是集合,而Array是数组

 

  (2)ArrayList具体类Array抽象类

 

  (3)数组必须在实例化时指定元素的数量,该数量一旦确定就不可以更改了,而ArrayList扩展了这一点,当实例化一个ArrayList实例时可以不指定集合元素数(有默认初始容量),当然你也可以指定初始容量

 

  (4)获取数组元素数时使用Length属性,而获取ArrayList集合的元素数时使用Count属性

 

  (5)数组可以有多维,而ArrayList只能是一维

 

 

       ArrayList al = new ArrayList(); //初始化

    //赋值

           al.Add(3); //将对象添加到 ArrayList 的结尾处 元素

    al.Add(5);

    al.Add(1);

    al.Add(8);

    al.Add(4);

    

    //错误      因为5号索引之前就没有,所以直接赋值不可以

    al[5] = 9;

    //正确 改值

            al[4] = 9;

 

            //查看个数

      Console.WriteLine(al.Count);//获取 ArrayList 中实际包含的元素数

    //清空集合

            al.Clear(); //从 ArrayList 中移除所有元素

 

     //克隆集合

            ArrayList al1 = new ArrayList();

            al1 = (ArrayList)al.Clone();//创建 ArrayList 的浅表副本

 

       //强转

            Console.WriteLine(al1[2]);

            //判断是否包含某个元素

            Console.WriteLine(al.Contains(6));

 

            //查看第一次出现该元素的索引号   若没有,返回-1

            Console.WriteLine(al.IndexOf(1));

            //查看最后一次出现该元素的索引号

            Console.WriteLine(al.LastIndexOf(9));

 

            //1号索引的位置插入一个4,后面数据的索引依次靠后

            al.Insert(1, 4);

       

    //移除某个元素第一次出现的

            al.Remove(5);

            Console.WriteLine(al[0]); //al[索引号]

    //移除 ArrayList 指定索引处的元素

            al.RemoveAt(2);

            Console.WriteLine(al[2]);

 

    //排序

    for (int i = 0; i < al.Count; i++)

            {

                Console.WriteLine(al[i]);

            }

            Console.WriteLine();

            al.Sort(); //排序升序

            for (int i = 0; i < al.Count; i++)

            {

                Console.WriteLine(al[i]);

            }

            //改为降序

            al.Reverse(); //翻转集合

            for (int i = 0; i < al.Count; i++)

            {

                Console.WriteLine(al[i]);

            }

 

         //遍历集合

            foreach (object aa in al)
            {
                Console.WriteLine(aa);
            }

            int[] array = new int[] { 2, 3, 4, 6, 7, 8, 9, 2 };

            foreach (int aa in array)//遍历数组

            {//定义一个什么类型的数据在数组或集合里面

 

                Console.WriteLine(aa + 2);

            }

例:输入人数,输入每一个人的分数 求平均分 最高分 最低分
            ArrayList al = new ArrayList();
            Console.Write("请输入班级人数");
            int a = int.Parse(Console.ReadLine());
            for (int i = 0; i < a; i++)
            {
                Console.Write("请输入第{0}个同学的分数:",i+1);
                al.Add(int.Parse(Console.ReadLine()));
            }
            double sum = 0;
            for (int i = 0; i < a;i++)
            {
                sum += double.Parse(al[i].ToString());
            }
            Console.WriteLine("该班平均分为:"+sum/a);
            al.Sort();
            Console.WriteLine("最低分"+al[0]);
            Console.WriteLine("最高分"+al[a-1]);
            Console.ReadLine(); 

例:将每个人名字 年龄存入集合   1.年龄从大到小排列 姓名也需要排列   2.需要知道年龄最大的是谁
            Console.Write("请输入人数:");
            int a = int.Parse(Console.ReadLine());
            ArrayList al = new ArrayList();
            for (int i = 0; i < a; i++)
            {
                Console.Write("请输入第{0}个人的姓名:", i + 1);
                al.Add(Console.ReadLine());
                Console.Write("请输入年龄:");
                al.Add(Console.ReadLine());
            }
            for (int i = 1; i < a*2; i +=2)
            {
                for (int j = i; j < a*2 - 2; j +=2)
                {
                    if (int.Parse(al[i].ToString()) < int.Parse(al[j + 2].ToString()))
                    {
                        int zhong = int.Parse(al[i].ToString());
                        al[i]=al[j+2];
                        al[j+2]=zhong;
                       string ming=al[i-1].ToString();
                        al[i-1] = al[j + 1];
                        al[j + 1] = ming;
                    }
                }
            }
            foreach (object aa in al)
            {
                Console.WriteLine(aa);
            }
            Console.WriteLine("姓名:{0}年龄:{1}", al[0], al[1]);
           Console.ReadLine();

posted @ 2016-06-28 15:39  无毒不羁  阅读(212)  评论(0编辑  收藏  举报