hoạt động như một bản đồ băm. trên thực tế, mọi đối tượng ActionScript là một thể hiện của một lớp động, hoạt động như là hashmap. tất nhiên các khóa luôn có thể va chạm với các thuộc tính. hành vi này xuất phát từ JavaScript. Tôi coi đó là một thất bại thiết kế.
Mảng khác nhau ở chỗ nó sẽ thực hiện một số thủ thuật trên các phím nguyên và từ điển khác ở chỗ nó không chuyển đổi khóa thành chuỗi, nhưng sử dụng bất kỳ giá trị đối tượng nào làm khóa. Xin lưu ý rằng Số và Boolean đều được chuyển thành Chuỗi.
tại sao bạn lại quan tâm đến cách triển khai? nếu nó được triển khai tốt, có thể bạn không muốn biết. Bạn có thể đánh giá nó. Nó có O (1) cho tất cả các hoạt động và là hợp lý nhanh (chèn chi phí khoảng hai lần nhiều thời gian như một cuộc gọi phương thức trống, xóa chi phí ít hơn). Mọi triển khai thay thế sẽ chậm hơn.
đây một chuẩn mực đơn giản (hãy chắc chắn để biên dịch nó cho phát hành và chạy nó trong máy nghe nhạc bên phải):
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 {}
}
}
có cái nhìn tại đây: http://code.google.com/p/ashashmap/ –
@George Profenza: tốt như tôi s, đó là một overnill totall. tại sao reimplement một cái gì đó đã tồn tại nguyên bản? – back2dos
@ back2dos bạn nói đúng. Nó phụ thuộc vào tình hình mặc dù. Tôi đã không đề nghị sử dụng nó, nhưng để có một cái nhìn. Kể từ khi ashashmap được coi là làm việc như một Java, sử dụng nó phải dễ dàng, vì vậy cho một công việc nhanh chóng và bẩn, nên được tốt. Đối với mã quan trọng tốc độ và kiểm soát những gì xảy ra trên tất cả các mã, sự hiểu biết và sử dụng các đối tượng từ điển là con đường phía trước. Tôi đã thêm một bình luận, không phải là một câu trả lời bởi vì nó là một điều phụ, không phải là một câu trả lời thực sự. Cảm ơn đã cho tôi thấy nơi tôi không rõ ràng. –