In Javascript, Objekte sind buchstäblich eine Hash-Implementierung . Eine Java-HashMap wird ein wenig unübersichtlich sein, daher würde ich Sie herausfordern Ihre Bedürfnisse zu überdenken.
El die direkte Antwort ist nein Ich glaube nicht, dass es eine große Implementierung von Java's HashMap in Javascript ist. Wenn es ist, ist es verpflichtet, Teil einer Bibliothek, die Sie können oder nicht verwenden möchten, und Sie sicherlich sein keine Bibliothek enthalten müssen nur um eine kleine Hashtabelle zu haben.
Schreiben wir also einen, nur um das Problem untersuchen . Sie können es verwenden, wenn Sie möchten. Wir beginnen einfach damit, einen Konstruktor zu schreiben, und wir nutzen Array, das zwar Object ist, aber einige nützliche Methoden hat, damit dieses Beispiel nicht zu langweilig wird:
function HashMap () {
var obj = [];
return obj;
}
var myHashMap = HashMap();
Wir fügen einige Methoden direkt aus der Java-Welt hinzu, übersetzen sie aber nach und nach in Javascript...
function HashMap() {
var obj = [];
obj.size = function () {
return this.length;
};
obj.isEmpty = function () {
return this.length === 0;
};
obj.containsKey = function (key) {
for (var i = 0; i < this.length; i++) {
if (this[i].key === key) {
return i;
}
}
return -1;
};
obj.get = function (key) {
var index = this.containsKey(key);
if (index > -1) {
return this[index].value;
}
};
obj.put = function (key, value) {
if (this.containsKey(key) !== -1) {
return this.get(key);
}
this.push({'key': key, 'value': value});
};
obj.clear = function () {
this = null; // Just kidding...
};
return obj;
}
Wir könnten es weiter ausbauen, aber ich halte das für den falschen Ansatz. Am Ende des Tages, wir am Ende mit, was Javascript hinter den Kulissen bietet, weil wir einfach nicht die HashMap Typ haben. In dem Prozess der so tun, als ob eignet sie sich für alle Arten von Mehrarbeit .
Es ist ein bisschen ironisch, dass eines der Dinge, die Javascript zu einer so interessanten und vielfältigen Sprache machen, die Leichtigkeit ist, mit der es diese Art von Wrestling . Wir können buchstäblich alles tun, was wir wollen, und das kurze Beispiel hier bringt nichts, wenn es nicht die trügerische Macht der Sprache verdeutlicht. Doch angesichts dieser Macht, scheint es am besten nicht verwenden .
Ich glaube einfach, dass Javascript leichter sein will. Meine persönliche Empfehlung ist, dass Sie das Problem erneut zu untersuchen, bevor Sie versuchen, eine ordnungsgemäße Java HashMap zu implementieren. Javascript will und kann man sich nicht leisten .
Denken Sie an die einheimische Alternative :
var map = [{}, 'string', 4, {}];
so schnell und einfach im Vergleich.
Andererseits glaube ich nicht, dass es hier eine eindeutige Antwort gibt. Diese Implementierung ist wirklich kann eine durchaus akzeptable Lösung sein . Wenn Sie meinen, dass Sie es gebrauchen können, würde ich sagen probieren Sie es aus . Aber ich würde es nie benutzen, wenn ich das Gefühl hätte, dass wir vernünftigerweise einfachere und natürlichere Mittel und ich bin mir fast sicher, dass wir sie haben.
Sidenote: Hängt Effizienz mit Stil zusammen? Beachten Sie die Performance-Hit ... gibt es ein großes O, das uns bei HashMap.put() ins Gesicht starrt... Die weniger als optimale Leistung ist hier wahrscheinlich kein Hindernis, und man müsste schon etwas sehr Ehrgeiziges machen oder eine große Menge an Daten haben, bevor man überhaupt einen Leistungsabfall in einem modernen Browser bemerken würde. Es ist nur interessant zu sehen, dass Operationen tendenziell weniger effizient werden, wenn man gegen den Strich arbeitet, fast so, als ob eine natürliche Entropie am Werk ist. Javascript ist eine Hochsprache und sollte effiziente Lösungen bieten, wenn wir uns an ihre Konventionen halten, so wie eine HashMap in Java eine viel natürlichere und leistungsfähigere Wahl sein wird.