Хорошо, вы делаете это для экономии памяти, я полагаю, потому что вы явно не экономите ресурсы ЦП, обращаясь к карте вместо поля. Итак, давайте посмотрим, насколько хорошо это работает: (при условии, что 64-битная JVM без сжатых операций - что нереально, но не должно слишком сильно изменять результаты, вы можете легко вычислить это самостоятельно)
По сути, поле в java никогда не будет занимать более 8 байт (хорошо, размер слова для ссылок). Таким образом, это означает, что для вашего класса с 10 полями, при условии, что все они не используются, лучшее, что мы можем сохранить, это 8 * 10 байт = 80 байт.
Теперь вы хотите заменить это одним HashMap - это означает, что мы уже использовали 8 дополнительных байтов для этого. Кроме того, HashMap всегда инициализируется, поэтому мы получаем заголовок: 2 слова header + reference + 3 ints + float + 1 array (2 слова overhead, размер 4 байта, 16 ссылок по умолчанию), который занимает 182 bytes
памяти.
Могу ли я поздравить вас с сохранением колоссальных -110 bytes
!
PS: я думаю, что наименьшее возможное значение по умолчанию для резервного массива хэш-набора равно 2, так что вы можете использовать это и получить четность. Но как только вы сохраняете объекты в наборе, вы получаете дополнительные издержки от объектов Wrapper, используемых классом. Так что на самом деле это плохая идея.