2014-10-16 3 views
0

Это очень общий вопрос, я просто беру пример Java HashMap.Это хорошая практика для итерации хэшмапа?

У меня есть хэш-карта.

Map<Integer,Integer> idPriceMap=new HashMap<Integer,Integer>(); 
idPriceMap.put(10,20); 
idPriceMap.put(11,25); 
idPriceMap.put(12,0); 
idPriceMap.put(13,100); 
idPriceMap.put(14,20); 
idPriceMap.put(15,40); 
idPriceMap.put(16,90); 

требования может отличаться, например:

UseCase1: Я хочу, чтобы значение для конкретного ключа при условии, что я знаю, что ключ (. PS Я знаю, что в этом сценарии HashMap является лучшей структурой)

Usecase2: Я хочу получить все значения.

На данный момент рассмотрите UseCase2. Вопрос в том, является ли это хорошей практикой?

В другом случае у меня есть UseCase1 & UseCase2 оба из них в одно и то же время. Что ты предлагаешь?

Я попытался Google, все, что у меня есть, - это лучшие способы перебора HashMap. :(

+0

Не знаете, что именно вы спрашиваете? Да hashmap может использоваться для обоих случаев нахождения значения по ключу или итерации по всем значениям. – brso05

+0

@ brso05 Хорошая практика перебора хэшмапа? Мы также можем перечислить список, согласно примерам использования, которые были бы лучшими? Надеюсь, теперь я понятен. – NamingException

+0

Если вам нужны оба случая, тогда HashMap, если вам просто нужно итерации, либо один из них в порядке. HashMap позволяет только клавиши key = value не могут быть повторены. Если вам не нужно получить доступ к определенному значению, связанному с ключом, а просто нужно получить доступ к самим значениям, список будет работать нормально. – brso05

ответ

0

UseCase1 (значение для конкретного ключа): hashap является лучшей структурой для этого, да

UseCase2 (все значения): потому что вы хотите, чтобы все значения, не имеет значения, если его HashMap, список или дерево

так я не уверен, что ваш вопрос, но вы можете легко получить временную сложность для различных структур данных, если Google для него:. http://en.wikipedia.org/wiki/Hash_table (см больших обозначений правой стороны O)

0

Если у вас смешанный сценарий использования, то на ваш вопрос нет общего ответа. в зависимости от частоты и распределения (сценарий 1 или 2) ваших запросов и волатильности содержимого вашей карты.

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

Если хэш-карта действительно бутылочное горлышко:

переспросить, с определенными частотами ваших использований;)

Если вы хотите сделать «преждевременной оптимизации» (см старый добрый c2 вики: http://c2.com/cgi/wiki?PrematureOptimization), а затем просто поместите свои значения в отдельный массив, чтобы немного ускорить запрос по полным значениям. Но если у вас много изменений, то ваша общая производительность будет ухудшаться. Это то же самое, что и индекс базы данных или нет.

Надеюсь, что это было полезно.