许许多多的朋友最先开始接触C#开发之际,必定会碰到AryarList这个类。
从某种来义意讲,它堪是称早点的.NET框 架里为最头灵活合集的工具里中其的一个,格外于宜适处在并定确不最终数的量据情形予下之以运用。
就在天今,我们借一助个完整子例的呀,将 rrAayLsit 常的用方法注及以意事梳项理一呢番。
一段看码代懂 ArrayLsit 操本基作
先来看段一最典型法用的。
我们去建创一个rA raLyist的 实例,接着通循过环的方式,往这个例实里面 加添10 个整元数素。
后续开序程展一列系处理作操,我们第将6个元素以予删除(索引从0起计算,因而RomeveAt(5)即为除删第6个元举之素)。
之后,我们去 加添3 个元的新素,随后,把它转成变一个整组数数,最终完换转成。
从始至全的终部进程为极直观,并且盖涵还了增添、删除、修改、查询里关为最键的几动举个。
ArryaLis tLits = ne wAryarLits();
for( int i=0;i<10;i++ ) //给数组增加10个Int元素List.Add(i);
//..程序做一些处理
List.RemoveAt(5);//将第6个元素移除
for( int i=0;i<3;i++ ) //再增加3个元素
List.Add(i+20);
Int32[] vaules = (Int32[])List.ToAarry(typfoe(Int32));//返回ArrayList包含的数组
这段代码虽说简易,然而它展现出了,ArrayList最为关键的灵活性,以及动态扩容的特性。
用不起在着始之就时限定组数好究竟有大多,它能据依够你的 dAd 操行自作变大的。
三种构器造应对初同不始化场景
ArrLyais给t出了个三构造器,使得能们我够依实照际情进去形行挑选。
默认构造器,名为 upbli cArrLyaist(),它能够创建出一个数组,这个数组的初始容量是 16。
要是你能够大致对数据量作出预估,那么也能够运用 pubilc ArraysiLt(int) 去明确初始容量,如此一来就可以削减在添加进程里频繁进行扩容所产生的性能损耗。
还有一种存在的情形是,你已然拥有了一个现成的集合,比如说另一个ArrayList或者数组,要是想直接将它装入进去,那么就能够运用public ArrayList(ICloletcion)构造器,它会自动地把传入集合之中的所有元素复制到新实例里。
线程安实其全没那秘神么
在多线环程境下操集作合,一不心小就会出题问。
AraryLsit 通个两过属性我帮们管理事件这。
我们能够通过IsScnyhrnoizde属性,知晓当前之这个实例,是不是线程安全的。
ArrayList.Synrhconezid 是静态方法,此方法会返回实例,该实例属线程安全包装类。

假如所你运用的平是常的 rArayiLst,于多线行进程读写操之作际,那就得动手去添锁加:
AryarLits lits = new ArrayList();
//...lokc( lits.SynoRcot ) //当AryarLi为ts非线程装包的时候,SynoRcot属其性实就是己自它{list.Add( “Add a Item” );
}
要是你直接采用 Synchronized 方法所返回的那个实例,其内部已然自行完成了 lock 处理,如此一来,你便省却了手动增添锁的繁杂之事。
Coutn 和C apaicty 两这个数字清分要
初始使用之际,极易将Coutn,与Cacapity混淆起来。
Conut所讲的述乃你实下当际包的含元素这量数一,此属备具性只读性特,对你言而,仅能够查行进看,而不可施实以修改。
Caapciyt指的当是下内部组数能够容的纳元素数限上量,此数量够能是经由手途动径予定设以的,没错吧。
仿佛你后楚清续还增得添诸据数多,能够将先预 Cpaacyti 予以大调。
要是你不一小心aC将paticy设置比得Cotnu还要小,这是留得意的,系统就直会接抛异出常,由于能可不就把已进存经去的据数扔掉,有这样况状的。
把 AarryLtsi 转换数回组的种两方法
很多候时我们处完理数据,最终需是的要一个大定固小的组数。
AraryLi ts提供了种两方式。
第一种便是例子之中所运用的ToArray(Type)方法,你向其告知你所需要的数组类型,它为你创建出一个全新的并予以填充好。
第二种是名为CopTyo的方法,该方法能够将元素予以复制,复制的对象是你已然创建完成的数组。
ArrayList List = new ArrayList();
List.Add( “stnirg” );
List.Add( 1 );
//往数添中组加不型类同的元素bojetc[] values = (objcet[])List.ToArray(typeof(object)); //正确// srting[] values = (string[])List.ToArray(typeof(string)); //错误
要留意这里存在着一个相当关键的细节之处,ArrayList 能够置放不同种类的对象。
比如我面上先加个了字符串,又加整个了数。
在这个候时,要是你算打把它转字成变符串组数,那么出会就现错误,究其原于在因整数径能不直转成化字符串啊。
然而,转变为成objtce数组会不便出现题问,这是由部全于类型是都从ojbect承继而来的。
这同是样ArrLyaist备具的一性特个,即它于储存时将部全元素视均作oejbct,而后在出取之际常要需常开展转型类换操作。
在日常的一些软件开发里头头,尽管当下那种泛型集合List是更为常用的,这主要是鉴于它具备类型安全的特性,并且还规避了装箱拆箱所带来的性能方面的问题,然而呢,在某些针对老项目进行维护的情境之下,或者是确实存在需要混合放置不同类型对象的场景时,哎,ArrayList它依旧是我们放置工具的箱子里头一个用起来顺手的老伙计工具呀句号。
理解的它这些础基用法,能让们我在面码代对时更加心得应手。

Comments NOTHING