|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
源代码保护方面其实现在考虑得没那么多了..NET也可以反编译.ASP写得复杂的话别人能看得懂的话.他也有能力自己写了.这方面担心的倒不太多.纵观现在网上可以下载的那些所谓BBS还有什么网站等等的源代码技能起首声明,这不是我写的,只是我看对你有效才贴下去的
1、甚么是ArrayList
ArrayList就是传说中的静态数组,用MSDN中的说法,就是Array的庞大版本,它供应了以下一些优点:
静态的增添和削减元素
完成了ICollection和IList接口
天真的设置数组的巨细
2、怎样利用ArrayList
最复杂的例子:
ArrayListList=newArrayList();
for(inti=0;i<10;i++)//给数组增添10个Int元素
List.Add(i);
//..程序做一些处置
List.RemoveAt(5);//将第6个元素移除
for(inti=0;i<3;i++)//再增添3个元素
List.Add(i+20);
Int32[]values=(Int32[])List.ToArray(typeof(Int32));//前往ArrayList包括的数组
这是一个复杂的例子,固然没有包括ArrayList一切的办法,可是能够反应出ArrayList最经常使用的用法
3、ArrayList主要的办法和属性
1)机关器
ArrayList供应了三个机关器:
publicArrayList();
默许的机关器,将会以默许(16)的巨细来初始化外部的数组
publicArrayList(ICollection);
用一个ICollection工具来机关,并将该汇合的元素增加到ArrayList
publicArrayList(int);
用指定的巨细来初始化外部的数组
2)IsSynchronized属性和ArrayList.Synchronized办法
IsSynchronized属性唆使以后的ArrayList实例是不是撑持线程同步,而ArrayList.Synchronized静态办法则会前往一个ArrayList的线程同步的封装。
假如利用非线程同步的实例,那末在多线程会见的时分,必要本人手动挪用lock来坚持线程同步,比方:
ArrayListlist=newArrayList();
//...
lock(list.SyncRoot)//当ArrayList为非线程包装的时分,SyncRoot属性实在就是它本人,可是为了满意ICollection的SyncRoot界说,这里仍是利用SyncRoot来坚持源代码的标准性
{
list.Add(“AddaItem”);
}
假如利用ArrayList.Synchronized办法前往的实例,那末就不必思索线程同步的成绩,这个实例自己就是线程平安的,实践上ArrayList外部完成了一个包管线程同步的外部类,ArrayList.Synchronized前往的就是这个类的实例,它内里的每一个属性都是用了lock关头字来包管线程同步。
3)Count属性和Capacity属性
Count属性是今朝ArrayList包括的元素的数目,这个属性是只读的。
Capacity属性是今朝ArrayList可以包括的最年夜数目,能够手动的设置这个属性,可是当设置为小于Count值的时分会激发一个非常。
4)Add、AddRange、Remove、RemoveAt、RemoveRange、Insert、InsertRange
这几个办法对照相似
Add办法用于增加一个元素到以后列表的开端
AddRange办法用于增加一批元素到以后列表的开端
Remove办法用于删除一个元素,经由过程元素自己的援用来删除
RemoveAt办法用于删除一个元素,经由过程索引值来删除
RemoveRange用于删除一批元素,经由过程指定入手下手的索引和删除的数目来删除
Insert用于增加一个元素到指定地位,列表前面的元素顺次今后挪动
InsertRange用于从指定地位入手下手增加一批元素,列表前面的元素顺次今后挪动
别的,另有几个相似的办法:
Clear办法用于扫除现有一切的元素
Contains办法用来查找某个工具在不在列表当中
其他的我就纷歧一包袱了,人人能够检察MSDN,下面讲的更细心
5)TrimSize办法
这个办法用于将ArrayList流动到实践元素的巨细,当静态数组元素断定不在增加的时分,能够挪用这个办法来开释空余的内存。
6)ToArray办法
这个办法把ArrayList的元素Copy到一个新的数组中。
4、ArrayList与数组转换
例1:
ArrayListList=newArrayList();
List.Add(1);
List.Add(2);
List.Add(3);
Int32[]values=(Int32[])List.ToArray(typeof(Int32));
例2:
ArrayListList=newArrayList();
List.Add(1);
List.Add(2);
List.Add(3);
Int32[]values=newInt32[List.Count];
List.CopyTo(values);
下面先容了两种从ArrayList转换到数组的办法
例3:
ArrayListList=newArrayList();
List.Add(“string”);
List.Add(1);
//往数组中增加分歧范例的元素
object[]values=List.ToArray(typeof(object));//准确
string[]values=(string[])List.ToArray(typeof(string));//毛病
和数组纷歧样,由于能够转换为Object数组,以是往ArrayList内里增加分歧范例的元素是不会堕落的,可是当挪用ArrayList办法的时分,要末传送一切元素都能够准确转型的范例大概Object范例,不然将会抛出没法转型的非常。
5、ArrayList最好利用倡议
这一节我们来会商ArrayList与数组的不同,和ArrayList的效力成绩
1)ArrayList是Array的庞大版本
ArrayList外部封装了一个Object范例的数组,从一样平常的意义来讲,它和数组没有实质的不同,乃至于ArrayList的很多办法,如Index、IndexOf、Contains、Sort等都是在外部数组的基本上间接挪用Array的对应办法。
2)外部的Object范例的影响
关于一样平常的援用范例来讲,这部分的影响不是很年夜,可是关于值范例来讲,往ArrayList内里增加和修正元素,城市引发装箱和拆箱的操纵,频仍的操纵大概会影响一部分效力。
可是恰好关于年夜多半人,多半的使用都是利用值范例的数组。
打消这个影响是没有举措的,除非你不必它,不然就要承当一部分的效力丧失,不外这部分的丧失不会很年夜。
3)数组扩容
这是对ArrayList效力影响对照年夜的一个要素。
每当实行Add、AddRange、Insert、InsertRange等增加元素的办法,城市反省外部数组的容量是不是不敷了,假如是,它就会以以后容量的两倍来从头构建一个数组,将旧元素Copy到新数组中,然后抛弃旧数组,在这个临界点的扩容操纵,应当来讲是对照影响效力的。
例1:好比,一个大概有200个元素的数据静态增加到一个以默许16个元素巨细创立的ArrayList中,将会经由:
16*2*2*2*2=256
四次的扩容才会满意终极的请求,那末假如一入手下手就以:
ArrayListList=newArrayList(210);
的体例创立ArrayList,不但会削减4次数组创立和Copy的操纵,还会削减内存利用。
例2:估计有30个元素而创立了一个ArrayList:
ArrayListList=newArrayList(30);
在实行过程当中,到场了31个元素,那末数组会扩大到60个元素的巨细,而这时候候不会有新的元素再增添出去,并且有无挪用TrimSize办法,那末就有1次扩容的操纵,而且华侈了29个元素巨细的空间。假如这时候候,用:
ArrayListList=newArrayList(40);
那末统统都办理了。
以是说,准确的预估大概的元素,而且在得当的时分挪用TrimSize办法是进步ArrayList利用效力的主要路子。
4)频仍的挪用IndexOf、Contains等办法(Sort、BinarySearch等办法经由优化,不在此列)引发的效力丧失
起首,我们要明白一点,ArrayList是静态数组,它不包含经由过程Key大概Value疾速会见的算法,以是实践上挪用IndexOf、Contains等办法是实行的复杂的轮回来查找元素,以是频仍的挪用此类办法其实不比你本人写轮回而且稍作优化来的快,假如有这方面的请求,倡议利用Hashtable或SortedList等键值对的汇合。
ArrayListal=newArrayList();
al.Add("How");
al.Add("are");
al.Add("you!");
al.Add(100);
al.Add(200);
al.Add(300);
al.Add(1.2);
al.Add(22.8);
.........
//第一种遍历ArrayList工具的办法
foreach(objectoinal)
{
Console.Write(o.ToString()+"");
}
//第二种遍历ArrayList工具的办法
IEnumeratorie=al.GetEnumerator();
while(ie.MoveNext())
{
Console.Write(ie.Curret.ToString()+"");
}
//第三种遍历ArrayList工具的办法
我健忘了,好象是使用ArrayList工具的一个属性,它前往一此工具中的元素个数.
然后在使用索引
for(inti=0;i<Count;i++)
{
Console.Write(al[i].ToString()+"");
}优点:简单易学、开发速度快、有很多年“历史”,能找到非常多别人做好的程序来用、配合activeX功能强大,很多php做不到的asp+activeX能做到,例如银行安全控件 |
|