Класс Object vs Hashmap - программирование
Подтвердить что ты не робот

Класс Object vs Hashmap

Хорошо ли использовать hashmap вместо использования класса объекта... Использование Hashmap....

Map<String, String> cellMap = new HashMap<String, String>();
int j = 0;
while (cellIter.hasNext()) 
{
   HSSFCell myCell = (HSSFCell) cellIter.next();
   cellMap.put(columnMap[j], myCell.toString());
   j++;
}

И используя класс объекта.....

ABC abc= new ABC(); 
abc.setA(myRow.getCell(0).toString());
abc.setB(myRow.getCell(1).toString());
abc.setC(myRow.getCell(2).toString());

Скажите, пожалуйста, в контексте работоспособности приложения, требования к памяти и т.д.

4b9b3361

Ответ 1

Это сильно зависит от того, чего вы пытаетесь достичь: для гибкости хэш-карта лучше. Но гибкость приходит по цене: хеш-карта также больше и медленнее, чем класс с одинаковым количеством сильно типизированных полей.

  • Карта хэшей имеет больший объем памяти, чем класс с одинаковым количеством полей
  • Карта хэширует бокс по примитивам
  • Хэш-карта медленнее создавать и получать доступ к

Существует также влияние на читаемость: когда ваша бизнес-логика специфична для класса с фиксированным числом полей, класс особого класса явно выигрывает; когда поля настроены динамически, хэш-таблица является вашим единственным вариантом. У вас также может быть гибридный дизайн, когда объект использует хэш-карту для своего внутреннего хранилища, внешне представляет собой красиво названные поля и предоставляет семантику для добавления дополнительных "полей" по ходу.

Подводя итог, прежде чем вы решите пойти с картой хэша для своей гибкости, вы должны решить, действительно ли вам нужна такая гибкость в вашем дизайне. Иногда ответ "да", а иногда "нет"; для этого не существует решения "один размер подходит всем".

Ответ 2

Вы должны увидеть это как проблему с дизайном перед исполнением. Не нужно делать предварительную преждевременную оптимизацию в пользу хорошего дизайна. Итак, вопрос: "вам нужно пройти через посредническую коллекцию, чтобы заполнить ваш доменный объект ABC?" В большинстве случаев я бы этого не сделал, но трудно сказать окончательный yes или окончательный нет, не зная более широкого контекста.

UPDATE: 30-40K: количество записей не имеет значения для сравнения Object vs HashMap, потому что они будут обрабатываться в цикле (отказ от ответственности: нерелевантный с точки зрения дизайна не с точки зрения представление). Однако число столбцов в вашей таблице важно, поскольку это будет отображаться непосредственно как количество атрибутов в вашем объекте.

Если это просто упражнение переноса данных или передачи данных, то я бы пошел с подходом HashMap. Предполагая, что ABC будет недолговечным, случайным объектом контейнера данных без поведения, нет необходимости его создавать. Затем я бы тестировал производительность системы и, если она не удовлетворяет критериям приемки, тогда я бы ее проработал и оптимизировал ее только в случае необходимости.

Ответ 3

Объект имеет поля (данные) и методы (поведение). Если ваши данные состоят в фиксированном наборе ячеек (A, B и C), то определенно используйте объект.

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

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

Например, у вас может быть метод getAAndB() в вашем объекте, который возвращает A, объединенный с B. Или у вас могут быть методы для преобразования или запроса полей. Или вы можете передавать экземпляры ABC другим объектам, которые их используют. Использование объекта ABD с четко определенными методами намного проще, чем с помощью Map<String, String>. Каковы ключи карты? Каковы их ценности? Где это задокументировано? Что делать, если вы хотите изменить ключи? Как вы обнаружите все места в коде, в котором используются эти ключи?