zoukankan      html  css  js  c++  java
  • 集合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();

  • 相关阅读:
    BZOJ 1221 [HNOI2001] 软件开发 费用流_建模
    BZOJ 1180 / 2843 LCT模板题 + 双倍经验
    bzoj 4372: 烁烁的游戏 动态点分治+树链剖分+线段树
    bzoj 3730: 震波 动态点分治+树链剖分+线段树
    luogu P2634 [国家集训队]聪聪可可 点分治
    bzoj 1468: Tree 点分治
    bzoj 1296: [SCOI2009]粉刷匠 动态规划
    bzoj 1293: [SCOI2009]生日礼物 问题转化 + 性质分析 + 滚动数组优化
    BZOJ 1042: [HAOI2008]硬币购物 容斥原理+背包
    matplotlib模块
  • 原文地址:https://www.cnblogs.com/ShenG1/p/5623692.html
Copyright © 2011-2022 走看看