Date Structures and Algorithms Using C# 读书笔记(二)

继续继续,坚持下去就好了,别人玩的时候我要学习!!!

。。。。。。。。。。。。。。。

第二章 ——数组和ArrayList

(1)数组是可索引的数据的集合。数据集可以是内置的类型,也可以是用户自定义的类型

          1.数组的声明和初始化

              type[] array-name;    实例:string[] names;

               实例化刚声明的数组names,并预留5个字符串的内存空间:string[] names = new string[5];

           2.数组元素的设置和存取访问

               储存数组元素既可以采用直接存取访问的方法也可以通过调用Array类的SetValue方法。直接存取方式通过赋值语句左侧的索引来引用数据位置:

                name[2]="Raymond";  sale[19]="23123";

                而SetValue方法则提供一个更加面向对象的方法来为数组元素赋值。这种方法需要两个参数,一个是索引数,另一个是元素的值。

                names.SetValue("Raymond",2); sales.SetValue("23123",19);

                数组元素的访问既可以通过直接存取的方式也可以通过调用GetValue方法的方式。GetValue方法只需要一个参数——索引。

                mynames = names [2];

                monthSales = sales.GetValue(19);

                用For循环遍历数组来存取每一个数组元素是一种很常见的方法

                 for(int i = 0;i < sales.GetUpperBound(0);i++)        //GetUpperBound可以获取数组元素的最高下标,在这里与sales.Lenth效果相同。

                        totalSales = totalSales + sales[i];

              3.检索数组元数据的方法和属性

                    Array类为检索数组元数据提供了几种属性。{

                            Lenth: 返回数组所有维数内元素的总数量。

                            GetLenth:返回数组指定维数内元素的数量。

                            Rank:返回数组的维数。

                            GetType:返回当前数组实例的类型。

                            }

                     Lenth方法用于计算多维数组中元素的数量以及返回数组中元素的准确编号。

                     在无法确定数组类型的情况下,GetType方法可以用来确定数组的数据类型。

int[] number;
number = new int[]{1,2,3,4,5};
Type arrayType = number.GetType();
if(arrayType.IsArry)
    Console.WriteLine("The array type is{0}",arrayType);
else
    Console.WriteLine("Not an array");
Console.Read();

                      GetType方法不仅返回数组的类型,而且还让大家明白对象确实是一个数组,下面是代码的输出:

                        The array type is : System.Int32[];

(2)ArrayList类

            当数组超出存储空间是使用能够自动调节自身大小的数组类型,这种数组被称为是ArrayList。ArrayList对象拥有可存储数组大小尺寸的Capacity属性,该属性初始值为16。当ArrayList中元素的数量达到此界限值时,Capacity属性就会为ArrayList存储空间另外增加16个元素。

           1.ArrayList类的成员

            {

                Add(): 向ArrayList添加一个元素。

                AddRange(): 在ArrayList末尾处添加群集的元素。

                Capacity:存储ArrayList所能包含的元素的数量。

                Clear():从ArrayList中移出全部的元素。

                Contains():确定指定的对象是否在ArrayList内。

                Copy To():把ArrayList或其中的某一段复制给一个数组。

                Count:返回ArrayList中当前元素数量。

                GetEnumerator():返回迭代ArrayList的计数器。

                IndexOf():返回制定数据项首次出现的索引。

                Insert():在ArrayList的指定索引处插入一个元素。

                InsertRange():在ArrayList的指定索引处开始插入群集的元素。

                Item():在指定索引处获取或者设置一个元素。

                Remove():移除指定数据项的首次出现。

                RemoveAt():在指定索引处移出一个元素。

                Reverse():对ArrayList中元素的顺序进行反转。

                Sort():对ArrayList中的元素按照阿拉伯字母表顺序进行排序。

                ToArray():把ArrayList的元素复制给一个数组。

                TrimToSize():将ArrayList的容量设置成ArrayList中的元素数量。

}

         2.应用ArrayList类

            首先声明ArrayList:

ArrayList grades = new ArrayList();

            用Add方法把对象添加给ArrayList

grades.Add(100);
grades.Add(84);
int position;
position = grades.Add(77);
Console.WriteLine("The grade 77 was added at position:" + position); 

            用Foreach循环可以把ArrayList中的对象显示出来。        

int total =  0;
double average = 0.0;
foreach(Object grade in grades)
     total += (int)grade;
average = total / grades.Count;
Console.WriteLine("The average grade is:" + average);

            如果在ArrayList某个特殊位置添加元素,则可以采用Insert方法。此方法采用了两个参数:插入元素的索引,以及要插入的元素。

grades.Insert(1,99);
grades.Insert(3,80);

            通过调用调用Capacity属性可以检查ArrayList的当前容量,而通过调用Count属性可以确定ArrayList中元素的数量。

Console.WriteLine("The current capacity of grades is"+ grades.Capacity);
Console.WriteLine("The number of grades in grades is"+grades.Count);

            如果知道要移除的数据项,但又不确定他的位置,那么就可以用Remove方法。此方法只有一个参数,即要从ArrayList中移除的对象。使用诸如Contain方法来验证对象确实存在于ArrayList内。

if(grades.Contain(54))
   grades.Remove(54);
else
   Console.WriteLine("Object not in ArrayList");
            如果知道所要移除数据项的索引,那么可以使用RemoveAt方法
grades.RemoveAt(2);
            通过调用IndexOf方法可以确定ArrayList中某个对象的位置
int pos;
pos = grades.IndexOf(70);
grades.RemoveAt(pos);
            有两种不同的方法可以用来给ArrayList添加范围。他们是AddRange和InsertRange方法。AddRange方法会把对象的范围添加到ArrayList的末尾处,而InsertRange方法则会把范围添加到ArrayList的指定位置。
ArrayList names = new ArrayList();
names.Add("Mike");
names.Add("Beata");
names.Add("Raymond");
names.Add("Bernica");
names.Add("Jennifer");
Console.WriteLine("The original list of name :");
foreach(Object name in names)
    Console.WriteLine(name);
Console.WriteLine();
string[] newNames = new string[]{"David","Michael"};
ArrayList moreNames = new ArrayList();
moreNames.Add("Terrill");
moreNames.Add("Donnie");
moreNames.Add("Mayo");
moreNames.Add("Clayton");
moreNames.Add("Alisa");
names.InsertRange(0,newNames);
names.AddRange(moreNames);
Console.WriteLine("The new list of names");
foreach(Object name in names)
     Console.WriteLine(name);

            此程序输出是:

              Dvid

              Michael

              Mike

              Beate

              Raymond

              Bernica

              Jennifer

              Terrill

              Donnie

              Mayo

              Clayton

              Alisa

           GetRange和ToArray方法。GetRange方法会返回来自ArrayList的对象的范围作为另外一个ArrayList。而ToArray方法则会把ArrayList的所有元素复制给一个数组。

            GetRange有两个参数:起始索引以及要从ArrayList找回的元素。

ArrayList someNames = new ArrayList();
someNames = names.GetRange(2,4);
Console.WriteLine("someNames sub-ArrayList:");
foreach(Object name in someNames)
    Console.WriteLine(name);
             这个程序段输出是:

              Mike

              Beate

              Raymond

              Bernica

            ToArray方法允许把ArrayList的内容传递给一个标准数组

Object[] arrNames;
arrNames = names.ToArray();
Console.WriteLine("Names from an array:");
for(int i = 0;i<arrNames.GetUpperBound(0);i++)
  Console.WriteLine(arrNames[i]);
            这代码后半段部分证明了来自ArrayList的元素趋势存储到了数组arrNames里。

。。。。。。。。。。。。。。。。。。。。。。。。。。
第二章到此就结束了,码字真的累,打完一遍感觉对ArrayList类的方法和属性有了更深入的理解,还是有收获的,就是太累了。。 费眼。\               


              







         


           

                       

                        

                    

                  

            

            

               

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值