Я думал о следующей ситуации: хочу подсчитать появление символов в строке (например, для проверки перестановки).Эффективность памяти: HashMap по сравнению с массивом
Одним из способов сделать это было бы выделение массива с 256 целыми числами (я предполагаю, что символы UTF-8), чтобы заполнить его нулями, а затем пройти через строку и прирастить целые числа на позициях массива соответствующий значению int символов.
Однако для этого подхода вам придется выделять 256 массивов каждый раз, даже если анализируемая строка очень короткая (и, следовательно, использует только малую часть массива).
Другим подходом было бы использование символа в Integer HashTable и сохранение номера для каждого встреченного символа. Таким образом, у вас будут только ключи для символов, которые на самом деле находятся в строке.
Поскольку мое понимание HashTable довольно теоретично, и я действительно не знаю, как оно реализовано в Java, мой вопрос: какой из двух подходов был бы более эффективным с точки зрения памяти?
Edit:
В ходе обсуждения этого вопроса (спасибо за ответы всем) Я понимаю, что у меня был очень нечеткое понимание природы UTF-8. После некоторого поиска я нашел this great video, что хочу поделиться, если у кого-то такая же проблема.
Раньше у меня был Apple II с колоссальной 56 КБ ОЗУ. Я также каждый день ходил по пять миль в школу, в гору в обоих направлениях ... :) Возможно, тогда я был бы обеспокоен массивом из 256 целых чисел. – ajb
Я был бы удивлен, если минимальная память HashMap занимает меньше памяти, чем массив из 256 целых чисел. –
Как точно определяются ограничения проблемы? В настоящее время UTF-8 поддерживает представление около 250 000 разных символов. – Affe