java - хранение строковых значений - наиболее эффективный - связанный список, список массивов или hashmap - PullRequest
0 голосов
/ 07 февраля 2012

В Java-приложении у меня есть требование, чтобы пользователь определял строковое значение, а затем продолжал добавлять дополнительные строковые значения к исходному значению ...

Может быть несколько разных именованных строк, определенных пользователем ..

Из hashmap, списка массивов и связанного списка, который я должен использовать на основе следующих критериев:

(1) Максимально эффективное использование памяти (2) Максимально возможное пространство на одно строковое значение

Кроме того, каков максимально возможный размер одного строкового значения во всех трех параметрах (хэш-карта / список массивов / связанный список)?

Ответы [ 4 ]

5 голосов
/ 07 февраля 2012

Если пользователь вводит строку, вам не нужно беспокоиться. Максимальная длина строки составляет более 2 млрд.

Самая высокая скорость набора текста, 216 слов в минуту,

http://en.wikipedia.org/wiki/Words_per_minute

Это означает, что даже быстрому машинисту понадобится минута, чтобы написать 1 К букв. Чтобы написать одну строку максимальной длины, потребуется 1491 день без остановки. (Предполагая, что их клавиатура, компьютер или пользователь умерли при попытке)

Крайне маловероятно, что вам нужна наиболее эффективная структура данных, и использование простейшего и наиболее очевидного выбора является лучшим подходом. (Опять же, потому что пользователи не могут печатать достаточно быстро, чтобы это когда-либо имело значение)

Kindle может хранить тысячи книг на устройстве, которое стоит менее 100 фунтов. Пользователь может писать все вживую и не писать достаточно, чтобы заполнить небольшое, дешевое мобильное устройство.

0 голосов
/ 07 февраля 2012

Если вы создаете текстовый редактор, в котором пользователь может перейти в любое место строки и начать ее изменять, буфер с пропусками является довольно хорошей структурой данных: http://en.wikipedia.org/wiki/Gap_buffer

0 голосов
/ 07 февраля 2012

Вам понадобится ArrayList<Stringbuffer>

0 голосов
/ 07 февраля 2012

Экономьте свое время и используйте StringBuilder или StringBuffer (если вам нужна безопасность потоков).

...