ArrayList基础认识

ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了动态的增加和减少元素,实现了ICollectionIList接口,灵活的设置数组的大小等好处。

下面介绍一些arraylist的最基本的东西。

 

ArrayList的构造器

 

构造器函数

注释

public  ArrayList();

默认的构造器,将会以默认(16)的大小来初始化内部的数组

public  ArrayList(ICollection);

用一个实现了ICollection接口的对象来构造,并将该集合的元素添加到ArrayList

public  ArrayList(int);

用指定的大小来初始化内部的数组

 

 

ArrayList的属性

 

属性名

注释

Count

目前ArrayList包含的元素的数量,这个属性是只读的。

Capacity

目前ArrayList能够包含的最大数量,可以手动的设置这个属性,但是当设置为小于Count值的时候会引发一个异常。

说明:Capacity是ArrayList可以存储的元素数。Count是ArrayList中实际包含的元素数。Capacity总是大于或等于Count。如果在添加元素时,Count超过Capacity,则该列表的容量会自动加倍扩充。

如果Capacity的值显式设置,则内部数组也需要重新分配以容纳指定的容量。如果Capacity被显式设置为0,则公共语言运行库将其设置为默认容量。默认容量为16。

在调用Clear后,Count为0,而此时Capacity确是默认容量16,而不是0

ArrayList的方法

 

方法名

注释

Int  Add(object value);

用于添加一个元素到当前列表的末尾

 

用于添加一批元素到当前列表的末尾

Void  Remove(object obj);

用于删除一个元素,通过元素本身的引用来删除

Void  RemoveAt(int index);

用于删除一个元素,通过索引值来删除

Void  RemoveRange(int index,int count);

用于删除一批元素,通过指定开始的索引和删除的数量来删除

Void  Insert(int index,object value)

用于添加一个元素到指定位置,列表后面的元素依次往后移动

Void  InsertRange(int index,Icollection collec)

用于从指定位置开始添加一批元素,列表后面的元素依次往后移动

Void  Sort()

对ArrayList或它的一部分中的元素进行排序。

Void  Reverse();

将ArrayList或它的一部分中元素的顺序反转。

Int  IndexOf(object)

Int  IndexOf(object,int)

Int  IndexOf(object,int,int)

返回ArrayList或它的一部分中某个值的第一个匹配项的从零开始的索引。没找到返回-1。

Int  LastIndexOf(object)

Int  LastIndexOf (object,int)

Int  LastIndexOf (object,int,int)

返回ArrayList或它的一部分中某个值的最后一个匹配项的从零开始的索引。没找到返回-1。

Bool  Contains(object)

确定某个元素是否在ArrayList中。包含返回true,否则返回false

Void  TrimSize()

这个方法用于将ArrayList固定到实际元素的大小,当动态数组元素确定不在添加的时候,可以调用这个方法来释放空余的内存。

Void  Clear();

清空ArrayList中的所有元素

Array  ToArray()

这个方法把ArrayList的元素Copy到一个新的数组中。

 

以上是对ArrayList的基本了解,在做项目的时候遇到这样一个问题,就是我需要把一组实体加入到数据库中,可是这组实体并不是一次性写好的,也就是在界面上可以对实体组进行添加删除,当单击确定的时候再执行写入。当然,因为实体数量不限,所以用ArrayList是一个很好的选择。下面是添加代码:

 

  //把促销信息写入到数组中。
            Entity.StrategyPromotion enStrategyPromotion = new Entity.StrategyPromotion();
            enStrategyPromotion.goodsId = ddlGood.SelectedValue;
            enStrategyPromotion.promotionPrice =Convert.ToDecimal(txtDiscount.Text);
            
            //把促销信息写入到list表中
            ListItem li = new ListItem();
            li.Text = ddlGood.SelectedItem.Text;
            li.Value = ddlGood.SelectedValue;
            //如果没有写入,则写入,如果已经写入,则不能写入。
            if (!this.lstArrayGood.Items.Contains(li))
            {
                this.lstArrayGood.Items.Add(li);
                arrGoods.Add(enStrategyPromotion);
            }


 

可是当我们从界面上把我们需要的删除一些数组元素时,就遇到问题,因为界面上只显示实体StrategyPromotiongoodsId,而价格不显示,我们用Remove(objectobj)方法来删除,因为添加时实体包括商品ID和价格,如果删除时实体只有商品ID的话,arrayList并不认为他们是一个实体进而不能删除,而如果我们在调用数据库获取促销价格的话似乎又有点不大合算,而且我们并不知道要删除的实体位于arraylist的第几个,所以这里这里根据某一个条件查询arraylist用于获取我们想要的object(StrategyPromotion实体)

                    //从详单数组中移除
                    //建立查询,查询出需要删除的数据
                        var query = from StrategyPromotion enStrategyPromotion in arrGoods  where enStrategyPromotion.goodsId == lstArrayGood.Items[i].Value                                    select enStrategyPromotion;
                    //把需要删除的数据获取到
                     foreach (StrategyPromotion s in query)
                    {
                        enPromotion = s;
                    }
                    //执行删除
                     arrGoods.Remove(enPromotion);


通过以上查询,便可以将我们需要找到的object查询出来,最终达到我们想要的结果。

从对datatable的了解再到arrayList,是我们可以把它们当成一个小型的数据库,只是存储方式不同而已,既然是数据库,那么增删改查就必不可少,那么,数据库有的查询方式他们自然就会有,如果想到这里,可能在就不会傻傻的去循环获取数据了。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值