2013-07-10 3 views
0

Мне нужно сохранить хэш-карту, ключ - String, val - стандартная Java TimeZone. Между (1) хранением Id String TimeZone и (2) сохранением самого объекта, в результате чего сохраняется больше памяти. Интуитивно я думаю, что 1, но друг сказал мне, что TimeZone - это фабричный класс, поэтому (2) более эффективен. Твое мнение? ТКСJava, сохранение объекта Timezone

1:

gmtToIanaMap.put("GMT+10:00", "Australia/Sydney"); 

2:

gmtToIanaMap.put("GMT+10:00", TimeZone.getTimeZone("Australia/Sydney")); 
+1

Не нужно использовать карту, так как 'TimeZone' уже имеет эту информацию. Чего вы пытаетесь достичь? –

+1

У вас есть доказательства того, что память является для вас проблемой? Если нет, используйте любой подход, который дает наиболее читаемый код. –

+0

@LuiggiMendoza Для вашего любопытства: я получаю событие из календаря Google, которое имеет только смещение +10, поэтому часовой пояс GMT + 10, но то, что пользователь означает, это Австралия/Сидней. Когда наступает дневное время, Австралия/Сидней имеет смещение +11, поэтому логика нарушена. Вот почему я хочу сразу же перечислить +10 в Австралию/Сидней. На мой вопрос: что вы думаете. –

ответ

0

После загрузки, каждая информация временной зоны будет кэшировать (в sun.util.calendar.ZoneInfoFile), так что на самом деле не имеет значения. Если после доступа к значению вам нужен объект TimeZone, я бы сохранил объект TimeZone.

Это, как указано в комментариях, я не уверен, что вы должны слишком беспокоиться об этом. Из того, что я понимаю, у вас будет что-то вроде 24+ (скажем, 50, чтобы покрыть x + 30 минут типов смещений). Информация о часовом поясе хранится на диске в каталоге jre/lib/zi. Большинство из них имеют размер менее 1k. Объекты в памяти не будут намного больше, поэтому мы говорим о 50k. Если вы на самом деле не напрягаетесь в памяти, это почти не имеет значения.

Наконец, все это действительно зависит от одной реализации jre, и я не уверен, что вы хотите основать свой дизайн на этом.

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