2013-05-12 4 views
-1

У меня hashMap с «Документом» в качестве ключей и «DocumentSections» в качестве значений. Map <Document, DocumentSection>. Документ имеет множество других переменных-членов (примитивных и не примитивных). Документ имеет также уникальное значение String. Мой вопрос заключается в том, что лучше заменить документ как ключ на это уникальное строковое значение из документа, например. HashMap<document.getValue(), DocumentSection>. где value ist уникальная строка. Будет ли моя программа потреблять меньше памяти, если я использую строки как ключи и не больше объекта Document в качестве ключа?распределение памяти для хэш-карты

Благодаря

ответ

1

ли моя программа потребляет меньше памяти,

Нет, карта хранит только ссылки на ваши документы. И ссылка на документ или на строку использует тот же объем памяти.

Обратите внимание, однако, что использование изменяемого объекта в качестве ключа, как правило, является плохим. Поэтому, если ваши документы могут измениться, с точки зрения hashcode/equals, вы, вероятно, должны использовать эту строку.

+0

Спасибо за ваши ответы. Я перезаписал свои equlas и hashmethode с этим уникальным строковым значением этого документа. Таким образом, даже Document изменен, это строковое значение является alwasy constant. Поэтому я уверен, что проблем с использованием объектов Document в качестве ключей не будет. Это правильно? или я ошибаюсь? Спасибо – duracell

+0

Тогда вы можете использовать оба метода - они будут эквивалентны. – assylias

+0

, если у вас есть переопределенный hashcode и equals, если соглашение последовало, нечего волноваться, предполагая, что вы сделали равные и хэш-коды тщательно – abhi

1

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

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

+0

Спасибо за ваши ответы. Я перезаписал свои equlas и hashmethode с этим уникальным строковым значением этого документа. Таким образом, даже Document изменен, это строковое значение является alwasy constant. Поэтому я уверен, что проблем с использованием объектов Document в качестве ключей не будет. Это правильно? или я ошибаюсь? Спасибо – duracell

+0

Документ Yup будет работать отлично как ключ тогда. – Lokesh

0

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

+0

Привет, grypp. Благодарю. Вы говорите: «может занять меньше времени». что это предположение или факт? – duracell

+0

Учитывая, что хэш-код документа вызывает только хэш-код String, это не изменит ситуацию. – assylias

Смежные вопросы