Стоимость выполнения HashMap, LinkedHashMap и ConcurrentHashMap при создании карты и получении значения на основе определенного ключа

Язык : Java
Тип проекта : Интернет (военное приложение)
Требование : Поддерживать структуру данных, которая может содержать ключ и значение пара

Описание: у нас есть таблица базы данных, в которой мы сопоставили пару ключ-значение

E.g. I) - Like for Customer Information, Table Name: - Customer_Info
----------------------------------------------------
 Key                |    Value
 Customer_Name      |     ABC
 Address            |     XYZ

continued....around 2000

Мы извлекаем информацию о клиентах из базы данных и храним ее в структуре данных. После этого при использовании мы получаем значение, соответствующее ключу.

До сих пор мы выбирали LinkedHashMap для поддержки пары ключ-значение.

Проблема: –

But I think here is some problem in data structure selection. 

Объясните два сценария, если я выберу
LinkedHashMap, HashMap или ConcurrentHashMap . Какая структура данных будет подходящей?

Случай I. Если я поддерживаю структуру данных из 2000 ключевых значений.

Случай II. Если я получаю случайный ключ со всей карты из любого места.

Требование: -

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

Все предложения будут высоко оценены.


person shiv.mymail    schedule 27.05.2013    source источник
comment
что означает для каждого клиента у вас есть объект Map?   -  person ajduke    schedule 27.05.2013
comment
Эффективность здесь не так актуальна, как просто выбор структуры данных, которая делает то, что вам нужно, и не более того. Используйте LinkedHashMap, если порядок имеет значение, ConcurrentHashMap, если вам нужен параллелизм, и HashMap, если вас это не волнует.   -  person Louis Wasserman    schedule 27.05.2013
comment
вы пытаетесь использовать кэш. с использованием карты?   -  person ajduke    schedule 27.05.2013
comment
Что вы имеете в виду под Исполнением? Конкретный тип карты обычно выбирается в зависимости от ваших требований к сложности вставки, удаления, итерации и т. д. Один из способов получить более полезные ответы — описать сценарий, в котором вы собираетесь использовать карту.   -  person rethab    schedule 27.05.2013
comment
Да, у нас есть отдельный объект карты для каждого клиента, но я думаю, что после всего описания мне следует выбрать HashMap   -  person shiv.mymail    schedule 28.05.2013


Ответы (2)


Помимо того факта, что единственный ответ, который здесь имеет значение, — это ответ, полученный путем профилирования и сравнительного анализа кода, я не понимаю, как можно сравнивать эти три структуры данных, поскольку они созданы для разных целей:

  • HashMap является стандартным, не потокобезопасным
  • ConcurrentHashMap - это тот, который вы будете использовать в многопоточной среде (читай: медленнее)
  • LinkedHashMap — это карта нормалей, которая позволяет перебирать ее (следуя порядку вставки)

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

person Jack    schedule 27.05.2013
comment
Здесь я попытался упомянуть все три, потому что все три Data Structures способны хранить данные в виде пары ключ-значение. И наша забота такая же, как хранить данные в ключе, значении, но нам нужно вставлять данные с правильным профилированием и выполнением затрат без поддержания порядка и выборки быстрым/случайным способом. - person shiv.mymail; 28.05.2013

Я бы выбрал HashMap, что снизит стоимость синхронизации. Пары ключ/значение кажутся статическими данными, и мне не нужна синхронизация, и я не вижу причин использовать LinkedHashMap, поскольку поддержание порядка бесполезно.

person Lokesh    schedule 27.05.2013