Actúa como un HashMap. de hecho, cada objeto de ActionScript que es una instancia de una clase dinámica, actúa como hashmap. por supuesto, las claves siempre pueden colisionar con las propiedades. este comportamiento proviene de JavaScript. Lo considero una falla de diseño.
La matriz es diferente en cuanto a que realizará algunos trucos en las claves enteras, y Dictionary es diferente en cuanto a que no convierte las claves en cadenas, sino que utiliza cualquier valor de objeto como clave. Tenga en cuenta que Number y Boolean se convierten a String.
ahora ¿por qué le importa cómo se implementa? si está bien implementado, probablemente no quieras saberlo. Usted puede compararlo. Tiene O (1) para todas las operaciones y es razonablemente rápido (la inserción cuesta aproximadamente el doble de tiempo que una llamada de método vacía, eliminando los costos menos). Cualquier implementación alternativa será más lenta.
aquí una referencia sencilla (asegúrese de compilarlo para la liberación y ejecutarlo en el jugador de la derecha):
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.utils.*;
public class Benchmark extends Sprite {
public function Benchmark() {
var txt:TextField = new TextField();
this.addChild(txt);
txt.text = "waiting ...";
txt.width = 600;
const repeat:int = 20;
const count:int = 100000;
var d:Dictionary = new Dictionary();
var j:int, i:int;
var keys:Array = [];
for (j = 0; j < repeat * count; j++) {
keys[j] = { k:j };
}
setTimeout(function():void {
var idx:int = 0;
var out:Array = [];
for (j = 0; j < repeat; j++) {
var start:int = getTimer();
for (i = 0; i < count; i++) {
d[keys[idx++]] = i;
}
out.push(getTimer() - start);
}
txt.appendText("\n" + out);
start = getTimer();
for (var k:int = 0; k < i; k++) {
test();
}
txt.appendText("\ncall:"+(getTimer() - start));
idx = 0;
out = [];
for (j = 0; j < repeat; j++) {
start = getTimer();
i = 0;
for (i = 0; i < count; i++) {
delete d[keys[idx++]];
}
out.push(getTimer() - start);
}
txt.appendText("\n" + out);
},3000);//wait for player to warm up a little
}
private function test():void {}
}
}
eche un vistazo a esto: http://code.google.com/p/ashashmap/ –
@Gorge Profenza: tan bueno como yo s, es un exceso total. ¿Por qué reimplementar algo que ya existe de forma nativa? – back2dos
@ back2dos tienes razón. Sin embargo, depende de la situación. No sugerí usar eso, pero echar un vistazo. Dado que se supone que ashashmap funciona como Java, usarlo debería ser fácil, por lo que para un trabajo rápido y sucio, debería estar bien. Para el código de velocidad crítica y para mantener el control de lo que ocurre en todo el código, la comprensión y el uso del objeto Diccionario es un avance. Agregué un comentario, no una respuesta porque es algo extra, no una respuesta real. Gracias por mostrarme dónde no estoy claro. –