Flash As3.0 实现队列,先进先出

原文地址:http://blog.csdn.net/eclipser1987/article/details/5395788

聊天系统中,我们会使用Array来保存聊天信息。但如果Array不限制大小,无限保存,对于用户的系统是个非常大的压力。这时我们就需要一个有固定大小的队列,将超过10条/50条的数据删除,保留新的数据。

[java]  view plain copy
  1. package {  
  2.     import flash.display.Sprite;  
  3.     import flash.events.MouseEvent;  
  4.   
  5.     public class Main extends Sprite  
  6.     {  
  7.         private var arr:Array = new Array();  
  8.         private var temp:uint = 0;  
  9.           
  10.         public function Main()  
  11.         {  
  12.             for(var i:uint = 0;i<10;i++)  
  13.             {  
  14.                 arr.push(i);  
  15.             }  
  16.               
  17.             stage.addEventListener(MouseEvent.CLICK,onClick);  
  18.         }  
  19.           
  20.         private function onClick(e:MouseEvent):void  
  21.         {  
  22.             trace("onClick");  
  23.               
  24.             trace("------------------");  
  25.               
  26.             for(var j:uint = 0;j<arr.length;j++)  
  27.             {  
  28.                 trace("arr["+j+"] : "+arr[j]);  
  29.             }  
  30.               
  31.             trace("------------------");  
  32.               
  33.             arr.shift();  
  34.             arr.push(temp++);  
  35.               
  36.             trace("arr.length ---> "+arr.length);  
  37.               
  38.             for(var k:uint = 0;k<arr.length;k++)  
  39.             {  
  40.                 trace("arr["+k+"] : "+arr[k]);  
  41.             }  
  42.         }  
  43.           
  44.     }  
  45. }  

 

点击5次后打印结果为:

 

[java]  view plain copy
  1. [SWF] G:/work2/AS3队列/bin-debug/Main.swf - 1,662 bytes after decompression  
  2. onClick  
  3. ------------------  
  4. arr[0] : 0  
  5. arr[1] : 1  
  6. arr[2] : 2  
  7. arr[3] : 3  
  8. arr[4] : 4  
  9. arr[5] : 5  
  10. arr[6] : 6  
  11. arr[7] : 7  
  12. arr[8] : 8  
  13. arr[9] : 9  
  14. ------------------  
  15. arr.length ---> 10  
  16. arr[0] : 1  
  17. arr[1] : 2  
  18. arr[2] : 3  
  19. arr[3] : 4  
  20. arr[4] : 5  
  21. arr[5] : 6  
  22. arr[6] : 7  
  23. arr[7] : 8  
  24. arr[8] : 9  
  25. arr[9] : 0  
  26. onClick  
  27. ------------------  
  28. arr[0] : 1  
  29. arr[1] : 2  
  30. arr[2] : 3  
  31. arr[3] : 4  
  32. arr[4] : 5  
  33. arr[5] : 6  
  34. arr[6] : 7  
  35. arr[7] : 8  
  36. arr[8] : 9  
  37. arr[9] : 0  
  38. ------------------  
  39. arr.length ---> 10  
  40. arr[0] : 2  
  41. arr[1] : 3  
  42. arr[2] : 4  
  43. arr[3] : 5  
  44. arr[4] : 6  
  45. arr[5] : 7  
  46. arr[6] : 8  
  47. arr[7] : 9  
  48. arr[8] : 0  
  49. arr[9] : 1  
  50. onClick  
  51. ------------------  
  52. arr[0] : 2  
  53. arr[1] : 3  
  54. arr[2] : 4  
  55. arr[3] : 5  
  56. arr[4] : 6  
  57. arr[5] : 7  
  58. arr[6] : 8  
  59. arr[7] : 9  
  60. arr[8] : 0  
  61. arr[9] : 1  
  62. ------------------  
  63. arr.length ---> 10  
  64. arr[0] : 3  
  65. arr[1] : 4  
  66. arr[2] : 5  
  67. arr[3] : 6  
  68. arr[4] : 7  
  69. arr[5] : 8  
  70. arr[6] : 9  
  71. arr[7] : 0  
  72. arr[8] : 1  
  73. arr[9] : 2  
  74. onClick  
  75. ------------------  
  76. arr[0] : 3  
  77. arr[1] : 4  
  78. arr[2] : 5  
  79. arr[3] : 6  
  80. arr[4] : 7  
  81. arr[5] : 8  
  82. arr[6] : 9  
  83. arr[7] : 0  
  84. arr[8] : 1  
  85. arr[9] : 2  
  86. ------------------  
  87. arr.length ---> 10  
  88. arr[0] : 4  
  89. arr[1] : 5  
  90. arr[2] : 6  
  91. arr[3] : 7  
  92. arr[4] : 8  
  93. arr[5] : 9  
  94. arr[6] : 0  
  95. arr[7] : 1  
  96. arr[8] : 2  
  97. arr[9] : 3  
  98. onClick  
  99. ------------------  
  100. arr[0] : 4  
  101. arr[1] : 5  
  102. arr[2] : 6  
  103. arr[3] : 7  
  104. arr[4] : 8  
  105. arr[5] : 9  
  106. arr[6] : 0  
  107. arr[7] : 1  
  108. arr[8] : 2  
  109. arr[9] : 3  
  110. ------------------  
  111. arr.length ---> 10  
  112. arr[0] : 5  
  113. arr[1] : 6  
  114. arr[2] : 7  
  115. arr[3] : 8  
  116. arr[4] : 9  
  117. arr[5] : 0  
  118. arr[6] : 1  
  119. arr[7] : 2  
  120. arr[8] : 3  
  121. arr[9] : 4  

 

数组的长度始终不变,为10,且数据的最老(最先加入的)就被新的替换掉,且数组的下标不会固定不变。

 

 

 

将思想封装为一个类:

 

[java]  view plain copy
  1. package  
  2. {  
  3.     /** 
  4.      * AS3实现队列 
  5.      */   
  6.     public class Queue  
  7.     {  
  8.           
  9.         private var arr:Array;  
  10.           
  11.         // change = true表示,队列长度可以改变,作用类似一般的Array,   
  12.         // change = false表示,队列长度不可以改变,有新的数据加入,将替换数组的最初的数据  
  13.         private var change:Boolean;  
  14.           
  15.         public function Queue(_arr:Array,_change:Boolean)  
  16.         {  
  17.             arr = _arr;  
  18.             change = _change  
  19.         }  
  20.   
  21.         /** 
  22.          * 对立中添加数据 
  23.          */   
  24.         public function add(_obj:Object):Array  
  25.         {  
  26.             if(change)  
  27.                 arr.shift();  
  28.             arr.push(_obj);  
  29.             return arr;  
  30.         }  
  31.   
  32.         /** 
  33.          * 让数组实现队列,arr为需要实现队列的数组,msg为该数组需要保存的数据,max为该数组最大保存的数量,默认值为10 
  34.          */   
  35.         public static function queueArray(_arr:Array,_obj:Object,_max:uint = 10):Array  
  36.         {  
  37.             if(_arr.length >= _max) _arr.shift();  
  38.             _arr.push(_obj);  
  39.             return _arr;  
  40.         }  
  41.           
  42.     }  
  43. }  

 

测试

 

[java]  view plain copy
  1. package  
  2. {  
  3.     import flash.display.Sprite;  
  4.     import flash.events.MouseEvent;  
  5.   
  6.     public class Main2 extends Sprite  
  7.     {  
  8.         public function Main2()  
  9.         {  
  10.             super();  
  11.               
  12.             stage.addEventListener(MouseEvent.CLICK,onClick);  
  13.         }  
  14.           
  15.         private function onClick(e:MouseEvent):void  
  16.         {  
  17.             trace("onClick");  
  18.             var arr:Array = new Array();  
  19.             for(var i:uint = 0;i<10;i++)  
  20.             {  
  21.                 arr.push(i);  
  22.             }  
  23.             trace(arr);  
  24.             Queue.queueArray(arr,100,10);  
  25.             trace(arr);  
  26.               
  27.               
  28.             var queue:Queue = new Queue(arr,true);  
  29.             trace(queue.add(200));  
  30.   
  31.             var queue2:Queue = new Queue(arr,false);  
  32.             trace(queue2.add(300));  
  33.         }  
  34.           
  35.     }  
  36. }  

 

打印结果:

 

[java]  view plain copy
  1. onClick  
  2. 0,1,2,3,4,5,6,7,8,9  
  3. 1,2,3,4,5,6,7,8,9,100  
  4. 2,3,4,5,6,7,8,9,100,200  
  5. 2,3,4,5,6,7,8,9,100,200,300  

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值