读书人

谈一下Flex中ArrayCollection的复制(

发布时间: 2012-10-30 16:13:36 作者: rapoo

谈谈Flex中ArrayCollection的复制(克隆)

在家上网赚钱更容易

在Flex的开发过程中,常常会遇到复制ArrayCollection的情况。以前只是从网上找个方法拿来就用,也没有具体的搞清楚所以然来。今天有时间,研究了一下,总结如下:

??????? Flex中的复制同java一样,也分为深复制和浅复制。(如果您对java的深复制和浅复制理解不深的话,可以参考我前一篇文章:JAVA中浅复制与深复制

??????? 下面总结一下ArrayCollection的浅复制,共有4种方法:

??????? 1、var newArray:ListCollectionView=new ListCollectionView(ListCollectionView(oldArray).list);

??????? 2、var newArray:ArrayCollection=new ArrayCollection(oldArray.source);

??????? 3、var newArray:ArrayCollection=new ArrayCollection(oldArray.source.slice());

??????? 4、var newArray:ArrayCollection=new ArrayCollection(oldArray.toArray());

??????? 以上方法中,第一种方法由于不是创建的独立的ArrayCollection对象,所以不推荐使用。第二、三、四种方法相似,可以参考使用。

??????? 有的时候,我们也会用到深复制,方法如下:

??????? var newArray:ArrayCollection=ArrayCollection(this.clone(oldArray));

??????? this.clone()方法定义如下:

?????????function clone(source:Object):*
???????? {
??????????????? var myBA:ByteArray = new ByteArray();
??????????????? myBA.writeObject(source);
??????????????? myBA.position = 0;
??????????????? return(myBA.readObject());
???????? }

下面是我测试以上程序的Flex程序代码,大家可以参考:

谈一下Flex中ArrayCollection的复制(克隆)<?xml?version="1.0"?encoding="utf-8"?>
谈一下Flex中ArrayCollection的复制(克隆)<mx:Application?xmlns:mx="http://www.adobe.com/2006/mxml"?creationComplete="initApp()"?layout="absolute">
谈一下Flex中ArrayCollection的复制(克隆)????<mx:Script>
谈一下Flex中ArrayCollection的复制(克隆)????<![CDATA[
谈一下Flex中ArrayCollection的复制(克隆)????????import?mx.collections.ArrayCollection;
谈一下Flex中ArrayCollection的复制(克隆)????????import?mx.collections.ListCollectionView;
谈一下Flex中ArrayCollection的复制(克隆)????????import?mx.controls.Alert;
谈一下Flex中ArrayCollection的复制(克隆)????????import?flash.utils.ByteArray;
谈一下Flex中ArrayCollection的复制(克隆)????????
谈一下Flex中ArrayCollection的复制(克隆)????????
谈一下Flex中ArrayCollection的复制(克隆)????????public?function?initApp():void
谈一下Flex中ArrayCollection的复制(克隆)????????{????????????
谈一下Flex中ArrayCollection的复制(克隆)????????}
谈一下Flex中ArrayCollection的复制(克隆)????????
谈一下Flex中ArrayCollection的复制(克隆)????????
谈一下Flex中ArrayCollection的复制(克隆)????????//开始测试:
谈一下Flex中ArrayCollection的复制(克隆)????????//浅复制1
谈一下Flex中ArrayCollection的复制(克隆)????????private?function?test1():void
谈一下Flex中ArrayCollection的复制(克隆)????????{
谈一下Flex中ArrayCollection的复制(克隆)????????????//初始化需要的对象
谈一下Flex中ArrayCollection的复制(克隆)????????????var?obj1:Object=new?Object();//定义对象obj1
谈一下Flex中ArrayCollection的复制(克隆)????????????var?obj11:Object=new?Object();//定义对象obj1的引用对象obj11
谈一下Flex中ArrayCollection的复制(克隆)????????????obj1.name="obj1.name";
谈一下Flex中ArrayCollection的复制(克隆)????????????obj1.sub=obj11;//obj1的sub属性引用obj11
谈一下Flex中ArrayCollection的复制(克隆)????????????obj11.name="obj11.name";????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//实例化ArrayCollection对象,并将obj1添加进该对象
谈一下Flex中ArrayCollection的复制(克隆)????????????var?oldArray:ArrayCollection=new?ArrayCollection();
谈一下Flex中ArrayCollection的复制(克隆)????????????oldArray.addItem(obj1);
谈一下Flex中ArrayCollection的复制(克隆)????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//浅复制ArrayCollection
谈一下Flex中ArrayCollection的复制(克隆)????????????var?newArray:ListCollectionView=new?ListCollectionView(ListCollectionView(oldArray).list);
谈一下Flex中ArrayCollection的复制(克隆)????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//修改obj11.name的值
谈一下Flex中ArrayCollection的复制(克隆)????????????obj11.name="obj11.name?is?changed!";
谈一下Flex中ArrayCollection的复制(克隆)????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//输出复制前后的两个对象所引用的obj11对象的name属性值,如一致为浅复制,不一致为深复制
谈一下Flex中ArrayCollection的复制(克隆)????????????Alert.show(oldArray.getItemAt(0).sub.name+"---"+newArray.getItemAt(0).sub.name);
谈一下Flex中ArrayCollection的复制(克隆)????????}
谈一下Flex中ArrayCollection的复制(克隆)????????//浅复制2
谈一下Flex中ArrayCollection的复制(克隆)????????private?function?test2():void
谈一下Flex中ArrayCollection的复制(克隆)????????{
谈一下Flex中ArrayCollection的复制(克隆)????????????//初始化需要的对象
谈一下Flex中ArrayCollection的复制(克隆)????????????var?obj1:Object=new?Object();//定义对象obj1
谈一下Flex中ArrayCollection的复制(克隆)????????????var?obj11:Object=new?Object();//定义对象obj1的引用对象obj11
谈一下Flex中ArrayCollection的复制(克隆)????????????obj1.name="obj1.name";
谈一下Flex中ArrayCollection的复制(克隆)????????????obj1.sub=obj11;//obj1的sub属性引用obj11
谈一下Flex中ArrayCollection的复制(克隆)????????????obj11.name="obj11.name";????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//实例化ArrayCollection对象,并将obj1添加进该对象
谈一下Flex中ArrayCollection的复制(克隆)????????????var?oldArray:ArrayCollection=new?ArrayCollection();
谈一下Flex中ArrayCollection的复制(克隆)????????????oldArray.addItem(obj1);
谈一下Flex中ArrayCollection的复制(克隆)????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//浅复制ArrayCollection
谈一下Flex中ArrayCollection的复制(克隆)????????????var?newArray:ArrayCollection=new?ArrayCollection(oldArray.source);
谈一下Flex中ArrayCollection的复制(克隆)????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//修改obj11.name的值
谈一下Flex中ArrayCollection的复制(克隆)????????????obj11.name="obj11.name?is?changed!";
谈一下Flex中ArrayCollection的复制(克隆)????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//输出复制前后的两个对象所引用的obj11对象的name属性值,如一致为浅复制,不一致为深复制
谈一下Flex中ArrayCollection的复制(克隆)????????????Alert.show(oldArray.getItemAt(0).sub.name+"---"+newArray.getItemAt(0).sub.name);
谈一下Flex中ArrayCollection的复制(克隆)????????}
谈一下Flex中ArrayCollection的复制(克隆)????????
谈一下Flex中ArrayCollection的复制(克隆)????????//浅复制3
谈一下Flex中ArrayCollection的复制(克隆)????????private?function?test3():void
谈一下Flex中ArrayCollection的复制(克隆)????????{
谈一下Flex中ArrayCollection的复制(克隆)????????????//初始化需要的对象
谈一下Flex中ArrayCollection的复制(克隆)????????????var?obj1:Object=new?Object();//定义对象obj1
谈一下Flex中ArrayCollection的复制(克隆)????????????var?obj11:Object=new?Object();//定义对象obj1的引用对象obj11
谈一下Flex中ArrayCollection的复制(克隆)????????????obj1.name="obj1.name";
谈一下Flex中ArrayCollection的复制(克隆)????????????obj1.sub=obj11;//obj1的sub属性引用obj11
谈一下Flex中ArrayCollection的复制(克隆)????????????obj11.name="obj11.name";????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//实例化ArrayCollection对象,并将obj1添加进该对象
谈一下Flex中ArrayCollection的复制(克隆)????????????var?oldArray:ArrayCollection=new?ArrayCollection();
谈一下Flex中ArrayCollection的复制(克隆)????????????oldArray.addItem(obj1);
谈一下Flex中ArrayCollection的复制(克隆)????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//浅复制ArrayCollection
谈一下Flex中ArrayCollection的复制(克隆)????????????var?newArray:ArrayCollection=new?ArrayCollection(oldArray.source.slice());
谈一下Flex中ArrayCollection的复制(克隆)????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//修改obj11.name的值
谈一下Flex中ArrayCollection的复制(克隆)????????????obj11.name="obj11.name?is?changed!";
谈一下Flex中ArrayCollection的复制(克隆)????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//输出复制前后的两个对象所引用的obj11对象的name属性值,如一致为浅复制,不一致为深复制
谈一下Flex中ArrayCollection的复制(克隆)????????????Alert.show(oldArray.getItemAt(0).sub.name+"---"+newArray.getItemAt(0).sub.name);
谈一下Flex中ArrayCollection的复制(克隆)????????}
谈一下Flex中ArrayCollection的复制(克隆)????????
谈一下Flex中ArrayCollection的复制(克隆)????????//浅复制4
谈一下Flex中ArrayCollection的复制(克隆)????????private?function?test4():void
谈一下Flex中ArrayCollection的复制(克隆)????????{
谈一下Flex中ArrayCollection的复制(克隆)????????????//初始化需要的对象
谈一下Flex中ArrayCollection的复制(克隆)????????????var?obj1:Object=new?Object();//定义对象obj1
谈一下Flex中ArrayCollection的复制(克隆)????????????var?obj11:Object=new?Object();//定义对象obj1的引用对象obj11
谈一下Flex中ArrayCollection的复制(克隆)????????????obj1.name="obj1.name";
谈一下Flex中ArrayCollection的复制(克隆)????????????obj1.sub=obj11;//obj1的sub属性引用obj11
谈一下Flex中ArrayCollection的复制(克隆)????????????obj11.name="obj11.name";????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//实例化ArrayCollection对象,并将obj1添加进该对象
谈一下Flex中ArrayCollection的复制(克隆)????????????var?oldArray:ArrayCollection=new?ArrayCollection();
谈一下Flex中ArrayCollection的复制(克隆)????????????oldArray.addItem(obj1);
谈一下Flex中ArrayCollection的复制(克隆)????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//浅复制ArrayCollection
谈一下Flex中ArrayCollection的复制(克隆)????????????var?newArray:ArrayCollection=new?ArrayCollection(oldArray.toArray());
谈一下Flex中ArrayCollection的复制(克隆)????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//修改obj11.name的值
谈一下Flex中ArrayCollection的复制(克隆)????????????obj11.name="obj11.name?is?changed!";
谈一下Flex中ArrayCollection的复制(克隆)????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//输出复制前后的两个对象所引用的obj11对象的name属性值,如一致为浅复制,不一致为深复制
谈一下Flex中ArrayCollection的复制(克隆)????????????Alert.show(oldArray.getItemAt(0).sub.name+"---"+newArray.getItemAt(0).sub.name);
谈一下Flex中ArrayCollection的复制(克隆)????????}
谈一下Flex中ArrayCollection的复制(克隆)????????
谈一下Flex中ArrayCollection的复制(克隆)????????//深复制
谈一下Flex中ArrayCollection的复制(克隆)????????private?function?test5():void
谈一下Flex中ArrayCollection的复制(克隆)????????{
谈一下Flex中ArrayCollection的复制(克隆)????????????//初始化需要的对象
谈一下Flex中ArrayCollection的复制(克隆)????????????var?obj1:Object=new?Object();//定义对象obj1
谈一下Flex中ArrayCollection的复制(克隆)????????????var?obj11:Object=new?Object();//定义对象obj1的引用对象obj11
谈一下Flex中ArrayCollection的复制(克隆)????????????obj1.name="obj1.name";
谈一下Flex中ArrayCollection的复制(克隆)????????????obj1.sub=obj11;//obj1的sub属性引用obj11
谈一下Flex中ArrayCollection的复制(克隆)????????????obj11.name="obj11.name";????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//实例化ArrayCollection对象,并将obj1添加进该对象
谈一下Flex中ArrayCollection的复制(克隆)????????????var?oldArray:ArrayCollection=new?ArrayCollection();
谈一下Flex中ArrayCollection的复制(克隆)????????????oldArray.addItem(obj1);
谈一下Flex中ArrayCollection的复制(克隆)????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//浅复制ArrayCollection
谈一下Flex中ArrayCollection的复制(克隆)????????????var?newArray:ArrayCollection=ArrayCollection(this.clone(oldArray));
谈一下Flex中ArrayCollection的复制(克隆)????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//修改obj11.name的值
谈一下Flex中ArrayCollection的复制(克隆)????????????obj11.name="obj11.name?is?changed!";
谈一下Flex中ArrayCollection的复制(克隆)????????????
谈一下Flex中ArrayCollection的复制(克隆)????????????//输出复制前后的两个对象所引用的obj11对象的name属性值,如一致为浅复制,不一致为深复制
谈一下Flex中ArrayCollection的复制(克隆)????????????Alert.show(oldArray.getItemAt(0).sub.name+"---"+newArray.getItemAt(0).sub.name);
谈一下Flex中ArrayCollection的复制(克隆)????????}
谈一下Flex中ArrayCollection的复制(克隆)????????
谈一下Flex中ArrayCollection的复制(克隆)????????//深复制调用的方法
谈一下Flex中ArrayCollection的复制(克隆)????????function?clone(source:Object):*
谈一下Flex中ArrayCollection的复制(克隆)????????{
谈一下Flex中ArrayCollection的复制(克隆)????????????var?myBA:ByteArray?=?new?ByteArray();
谈一下Flex中ArrayCollection的复制(克隆)????????????myBA.writeObject(source);
谈一下Flex中ArrayCollection的复制(克隆)????????????myBA.position?=?0;
谈一下Flex中ArrayCollection的复制(克隆)????????????return(myBA.readObject());
谈一下Flex中ArrayCollection的复制(克隆)????????}
谈一下Flex中ArrayCollection的复制(克隆)????]]>
谈一下Flex中ArrayCollection的复制(克隆)????</mx:Script>
谈一下Flex中ArrayCollection的复制(克隆)????<mx:Button?label="第一种浅复制方法"?click="test1()"?x="61"?y="36"/>
谈一下Flex中ArrayCollection的复制(克隆)????<mx:Button?label="第二种浅复制方法"?click="test2()"?y="57"?x="61"?width="114"/>
谈一下Flex中ArrayCollection的复制(克隆)????<mx:Button?label="第三种浅复制方法"?click="test3()"?y="78"?x="61"?width="114"/>
谈一下Flex中ArrayCollection的复制(克隆)????<mx:Button?label="第四种浅复制方法"?click="test4()"?y="98"?x="61"?width="114"/>
谈一下Flex中ArrayCollection的复制(克隆)????
谈一下Flex中ArrayCollection的复制(克隆)????<mx:Button?label="深复制方法"?click="test5()"?y="147"?x="61"/>
谈一下Flex中ArrayCollection的复制(克隆)</mx:Application>

?

在家上网赚钱更容易

读书人网 >flex

热点推荐