2007年6月19日 @ 10:42
[AS3]常用数据集合类(Map,Queue,Stack)
[AS3]常用数据集合类
[ActionScript版本] ActionScript3
[Flash Player版本] Flash 9.0
本来我是想参考Java方式采用接口方式来实现像“Map,Iterator,Queue,Stack,Iterable,Collection,ArrayList,Hashtable”等Java中常用的数据类,发现越写越复杂了!而且我后来感觉没有必要搞得那么复杂,比如说像ArrayList类吧,Flash当中已经有Array类了,也没有必要再去写一个了,而像HashMap吧,Flash又不能实现Hash表,还不如干脆去掉Hash了,直接用Map了,像Iterator,Collection类吧,完全用Array都可以实现了,也没有必要再写新的了,对于Flash来说,简单,高效就可以了!所以我就重新写了Map,Queue,Stack等常用的数据集合类!(效率以后不断去优化了)
另外发现Flash不能像Java那样可以强制转换类型,所以这几个类只好采用Flash的方式了,也就是不确定类型都用*号来代替,如 get(key:*):*;同时也发现Flash也采用像Java那样trace(new Point(x,y)),显示一个对象就会自动去调用这个对象中的toString方法!
本人觉得AS3语法太综合其他语言了,有些不伦不类的。说不好听的话,就是一个“杂交”品种!
Map类:类似于Java中的HashMap类的功能,可以储存不同的键和键值;
Queue类:也类似于Java中的Queue接口实现的队列功能,以 FIFO(先进先出)的方式排序各个元素。
Stack类:也参考Java中的Stack类实现堆栈功能,按 LIFO(后进先出)的方式对元素进行排序。
[ActionScript版本] ActionScript3
[Flash Player版本] Flash 9.0
本来我是想参考Java方式采用接口方式来实现像“Map,Iterator,Queue,Stack,Iterable,Collection,ArrayList,Hashtable”等Java中常用的数据类,发现越写越复杂了!而且我后来感觉没有必要搞得那么复杂,比如说像ArrayList类吧,Flash当中已经有Array类了,也没有必要再去写一个了,而像HashMap吧,Flash又不能实现Hash表,还不如干脆去掉Hash了,直接用Map了,像Iterator,Collection类吧,完全用Array都可以实现了,也没有必要再写新的了,对于Flash来说,简单,高效就可以了!所以我就重新写了Map,Queue,Stack等常用的数据集合类!(效率以后不断去优化了)
另外发现Flash不能像Java那样可以强制转换类型,所以这几个类只好采用Flash的方式了,也就是不确定类型都用*号来代替,如 get(key:*):*;同时也发现Flash也采用像Java那样trace(new Point(x,y)),显示一个对象就会自动去调用这个对象中的toString方法!
本人觉得AS3语法太综合其他语言了,有些不伦不类的。说不好听的话,就是一个“杂交”品种!
Map类:类似于Java中的HashMap类的功能,可以储存不同的键和键值;
- package com.klstudio.data{
- import flash.utils.Dictionary;
- public class Map{
- private var _keys:Array = null;
- private var props:Dictionary = null;
- public function Map(){
- this.clear();
- }
- public function clear():void{
- this.props = new Dictionary();
- this._keys = new Array();
- }
- public function containsKey(key:*):Boolean{
- return this.props[key] != null;
- }
- public function containsValue(value:*):Boolean{
- var result:Boolean = false;
- var len:uint = this.size();
- if(len > 0){
- for(var i:uint = 0 ; i < len ; i++){
- if(this.props[this._keys[i]] == value) return true;
- }
- }
- }
- public function get(key:*):*{
- return this.props[key];
- }
- public function put(key:*,value:*):*{
- var result:* = null;
- if(this.containsKey(key)){
- result = this.get(key);
- this.props[key] = value;
- }else{
- this.props[key] = value;
- this._keys.push(key);
- }
- return result;
- }
- public function remove(key:*):*{
- var result:* = null;
- if(this.containsKey(key)){
- delete this.props[key];
- var index:int = this._keys.indexOf(key);
- if(index > -1){
- this._keys.splice(index,1);
- }
- }
- return result;
- }
- public function putAll(map:Map):void{
- this.clear();
- var len:uint = map.size();
- if(len > 0){
- var arr:Array = map.keys;
- for(var i:uint=0;i<len;i++){
- this.put(arr[i],map.get(arr[i]));
- }
- }
- }
- public function size():uint{
- return this._keys.length;
- }
- public function isEmpty():Boolean{
- return this.size < 1;
- }
- public function values():Array{
- var result:Array = new Array();
- var len:uint = this.size();
- if(len > 0){
- for(var i:uint = 0;i<len;i++){
- result.push(this.props[this._keys[i]]);
- }
- }
- return result;
- }
- public function keys():Array{
- return this._keys;
- }
- public function toString():String{
- var out:String = "";
- for(var i:uint=0;i<this.size();i++){
- out += this._keys[i] + ":"+this.get(this._keys[i]) + "\n";
- }
- return out;
- }
- }
- }
Queue类:也类似于Java中的Queue接口实现的队列功能,以 FIFO(先进先出)的方式排序各个元素。
- package com.klstudio.data{
- public class Queue{
- private var arr:Array;
- private var pointer:uint;
- function Queue(){
- this.arr = new Array();
- this.pointer = 0;
- }
- public function element():*{
- if(isEmpty()){
- return null;
- }else{
- if(this.pointer < this.size()){
- return this.arr[this.pointer++];
- }else{
- return null;
- }
- }
- }
- public function peek():*{
- if(isEmpty()){
- return null;
- }else{
- return this.arr[0];
- }
- }
- public function poll():*{
- this.pointer = 0;
- if(isEmpty()){
- return null;
- }else{
- return this.arr.shift();
- }
- }
- public function add(object:*):Boolean{
- this.pointer = 0;
- if(this.contains(object)){
- return false;
- }else{
- this.arr.push(object);
- return true;
- }
- }
- public function contains(object:*):Boolean{
- for(var i:uint = 0;i<this.size();i++){
- if(this.arr[i] == object){
- return true;
- }
- }
- return false;
- }
- public function clear():void{
- this.arr = new Array();
- this.pointer = 0;
- }
- public function isEmpty():Boolean{
- return this.size() == 0;
- }
- public function size():uint{
- return this.arr.length;
- }
- public function toString():String{
- return this.arr.toString();
- }
- }
- }
Stack类:也参考Java中的Stack类实现堆栈功能,按 LIFO(后进先出)的方式对元素进行排序。
- package com.klstudio.data{
- public class Stack{
- private var arr:Array;
- private var pointer:uint;
- function Stack(){
- this.arr = new Array();
- this.pointer = 0;
- }
- public function element():*{
- if(isEmpty()){
- return null;
- }else{
- if(this.pointer < 0){
- return null;
- }else{
- return this.arr[this.pointer--];
- }
- }
- }
- public function peek():*{
- if(isEmpty()){
- return null;
- }else{
- return this.arr[this.arr.length];
- }
- }
- public function pop():*{
- if(isEmpty()){
- return null;
- }else{
- this.pointer = (this.size()>1)?this.size() - 2:0;
- return this.arr.pop();
- }
- }
- public function add(object:*):Boolean{
- if(this.contains(object)){
- this.pointer = this.size() - 2;
- return false;
- }else{
- this.pointer = this.size() - 1;
- this.arr.push(object);
- return true;
- }
- }
- public function contains(object:*):Boolean{
- for(var i:uint = 0;i<this.size();i++){
- if(this.arr[i] == object){
- return true;
- }
- }
- return false;
- }
- public function clear():void{
- this.arr = new Array();
- this.pointer = 0;
- }
- public function isEmpty():Boolean{
- return this.size() == 0;
- }
- public function size():uint{
- return this.arr.length;
- }
- public function toString():String{
- return this.arr.toString();
- }
- }
- }
Filed under: 资料 · Tags: 算法 as3
Articles related:
A* Pathfinding for Beginners (2007-6-19 10:34:20)
A*寻路,二叉堆优化及AS3实现 (2007-6-19 10:32:12)
ActionScript 3.0 Display Lists and Display Objects (2007-6-15 10:30:52)
ActionScript 3.0 Cookbook 错误一览表 (2007-6-14 14:58:28)
Developing in Trees (2007-6-6 20:38:22)
Flash CS3 +As3 video (2007-6-4 17:49:38)
Flash CS3 绘制复杂圆角矩形 (2007-6-4 17:48:32)
Flash CS3 +AS3键盘事件 (2007-6-4 17:47:4)
Associating Custom AS3 Classes with Embedded Asset (2007-5-30 10:18:41)
用Flash9/as3跟踪音频波形 (2007-5-23 16:8:3)
Leave a Comment
◎welcome to give out your point。
