В javascript объекты - это буквально хеш-реализация . Java HashMap будет немного подделкой, поэтому я бы предложил вам переосмыслить ваши потребности.
Прямой ответ - не , я не верю, что в Java есть отличная реализация HashMap Java. Если он есть, он обязательно должен быть частью библиотеки, которую вы можете или не хотите использовать, и вам, безусловно, не нужно включать библиотеку , чтобы иметь небольшую хеш-таблицу.
Итак, давайте продолжим и напишем один, просто чтобы изучить проблему . Вы можете использовать его, если хотите. Мы просто начнем с написания конструктора и добавим Array, который является Object, но имеет несколько полезных методов, которые не позволят этому примеру стать слишком утомительным:
function HashMap () {
var obj = [];
return obj;
}
var myHashMap = HashMap();
Мы добавим некоторые методы прямо из мира Java, но по мере их перевода будем переходить на 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;
}
Мы могли бы продолжать строить это, но я думаю, что это неправильный подход. В конце концов, мы в конечном итоге используем то, что javascript предоставляет за кулисами, потому что у нас просто нет типа HashMap. В процессе , притворяясь , он поддается всем видам дополнительной работы .
Немного иронично, что одна из вещей, которая делает javascript таким интересным и разнообразным языком, - это легкость, с которой он справляется с этим видом борьбы . Мы можем буквально делать все, что захотим, и быстрый пример здесь ничего не делает, если он не иллюстрирует обманчивую силу языка. Тем не менее, учитывая эту силу, кажется, лучше не использовать .
Я просто думаю, что javascript хочет быть легче. Моя личная рекомендация состоит в том, чтобы вы повторно изучили проблему, прежде чем пытаться реализовать правильный Java HashMap. Javascript не хочет и не предоставляет для одного .
Запомните нативную альтернативу :
var map = [{}, 'string', 4, {}];
.. так быстро и легко по сравнению.
С другой стороны, я не верю, что здесь есть какие-то жесткие ответы. Эта реализация действительно может быть вполне приемлемым решением . Если вы чувствуете, что можете его использовать, я бы сказал, поверните его . Но я бы никогда не использовал его, если бы чувствовал, что у нас есть достаточно простых и более естественных средств в нашем распоряжении ... что я почти уверен, что мы делаем.
Sidenote:
Эффективность связана со стилем? Обратите внимание, что производительность снизилась .. есть большая буква O, смотрящая нам в лицо на HashMap.put () ... Неоптимальная производительность, вероятно, не является здесь пробкой, и вы ' Вероятно, мне нужно сделать что-то очень амбициозное или иметь большой набор данных, прежде чем вы даже заметите снижение производительности современного браузера. Просто интересно отметить, что операции, как правило, становятся менее эффективными, когда вы работаете с зерном, почти как если бы на работе была естественная энтропия. Javascript - это язык высокого уровня, и он должен предлагать эффективные решения, когда мы соблюдаем его соглашения, так же как HashMap в Java будет гораздо более естественным и высокопроизводительным выбором.