仓酷云

标题: ASP编程:技能:ArrayList的利用办法 [打印本页]

作者: 若天明    时间: 2015-1-16 22:17
标题: ASP编程:技能:ArrayList的利用办法
源代码保护方面其实现在考虑得没那么多了..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能做到,例如银行安全控件
作者: 乐观    时间: 2015-1-19 06:58
Response:从字面上讲是“响应”,因此这个是服务端向客户端发送东西的,例如Response.Write
作者: 愤怒的大鸟    时间: 2015-1-26 14:47
完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。
作者: 蒙在股里    时间: 2015-2-4 18:48
多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。
作者: admin    时间: 2015-2-10 05:23
在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。
作者: 精灵巫婆    时间: 2015-2-28 21:42
运用经典的例子。并且自己可以用他来实现一些简单的系统。如果可以对他进行进一步的修改,找出你觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。
作者: 金色的骷髅    时间: 2015-3-10 08:31
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。
作者: 爱飞    时间: 2015-3-17 06:10
那么,ASP.Net有哪些改进呢?
作者: 莫相离    时间: 2015-3-17 06:10
Session:这个存储跟客户端会话过程的数据,默认20分钟失效
作者: 小妖女    时间: 2015-3-23 23:02
代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2