Итализация через хесмап: «Для» петля с использованием произвольного доступа или итератора? -- java поле с участием hashtable поле с участием hashmap пол Связанный проблема

Iterating over a hashmap: 'For' loop using Random Access OR Iterator?


3
vote

проблема

русский

Мне нужно повторить через хешмап, чтобы извлекать значения, хранящиеся в нем.

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

Английский оригинал

I need to iterate over a Hashmap to retrieve values stored in it.

As a bonus, I also have a list of the keys. So I have the option to iterate over it using the iterator or by random Access in a for loop. Which of the two options would provide a better performant way to do so?

</div
        
 
 

Список ответов

3
 
vote
<Р> Там нет никакой разницы, но если вы получаете список ключей с помощью вызова <код> map.keySet() , то проще всего просто итерация по <код> git branch -a0 :
 <код> git branch -a1  

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

 

There is no real difference, but if you are getting the list of keys by calling map.keySet(), then it's easiest to just iterate over the entrySet():

for (Map.Entry<K, V> entry : map.entrySet()) {      ...  } 

This way you can avoid having to both build a collection of keys and then looking up the value for each.

</div
 
 
2
 
vote
 <код> for (Object O : TheMap.values()) {     // Do something }   
 
for (Object O : TheMap.values()) {     // Do something } 
</div
 
 
2
 
vote

Интуитивно я бы сказал, что используйте итератор, поскольку оно может не потребовать никаких поисков и просто дать вам прямую производительность. Обратите внимание, что ваши лучшие характеристики дела будут o (n), поскольку вы касаетесь каждого элемента набора, и ваш средний производительность корпуса будет o (n) раз Big-O для вашего метода доступа. Поскольку Hash Lookup имеет высокую вероятность O (1), вы, скорее всего, будете все еще, но с итератором, поскольку вы просто рассчитываете следующую позицию, вы (я думаю) гарантированы (1) доступ для следующего элемента. Вот почему я бы выбрал итератор. Плюс постоянное время для следующего вычисления элементов, вероятно, лучше, чем постоянное время для поиска положения по хэш.

 

Intuitively I would say use the iterator, since it may not require any lookups and just give you straight O(n) performance. note that your best case performance will be O(n) since you are touching every element of the set, and your average case performance will be O(n) times the big-O for your access method. Since Hash lookup has a high-probability of O(1) you will most likely be O(n) still, but with an iterator, since you are just calculating the next position, you are (I think) guaranteed O(1) access for the next element. This is why I would choose the iterator. Plus the constant time for next element calculation is probably better than the constant time for position lookup by hash.

</div
 
 
0
 
vote

Если вам просто нужны значения, и вам не нужно знать взаимосвязь между ключом и значениями, то итератор будет быстрее, так как вы экономите время, чтобы вычислить свое значение клавиш.

 

If you just need the values and you do not need to know the relationship between key and values, then iterator will be faster since you save time time to compute the has value of the keys.

</div
 
 

Связанный проблема

10  Может ли javafx filechooser "запомнить" последний каталог, который он открыл?  ( Can a javafx filechooser remember the last directory it opened ) 
Мой контроллер просмотра имеет один <код> FileChooser экземпляра, используемый как для открытия, так и для сохранения файлов. Каждый раз, когда я звоню <ко...

0  Java Applet Рисование формы на входе пользователя  ( Java applet drawing shapes by user input ) 
Вот то, что я хотел сделать. Есть текстовое поле, и пользователь входит в то, что он хочет. Например, «прямоугольник» или «прямоугольник», «круг» или «круг». ...

26  Как добавить кнопку в ряд jtable в качелях java  ( How to add button in a row of jtable in swing java ) 
Я сделал один важный графический интерфейс, который имел jtable с некоторыми строками и столбцами. Как я должен добавить кнопку для строки в JTable? ...

0  Прокрутите вверх относительной макета при прокрутке вверх по просмотру  ( Scroll up relative layout when scrolling up listview ) 
Я создаю приложение. и пользовательская информация отображается в относительной макете. При относительной макете - это список с элементами, создаваемыми польз...

1  Неправильное количество прошедших args, но я передаю правильную сумму  ( Wrong number of args passed but i pass the correct amount ) 
Я использую quil с cljure и получаю странную ошибку. Я получаю ошибку <код> Exception in :draw function: #error { :cause Wrong number of args (1) pass...

0  Не могу найти какие-либо рабочие примеры использования официального Google Translate Java API (Rev41)  ( Cant find any working examples of using the official google translate java api ) 
У меня потребовалось около 5 минут, чтобы использовать API Google Translate REST от JavaScript, Nodejs, wget и Java через библиотеку Sun's Jersey, но я не мог...

-3  Как прекратить воспроизведение сервиса в Android  ( How to stop playing service in android ) 
У меня есть вопрос о сервисе и трансляции в Android.I Создайте страницу будильника, которые используя класс тревоги Reciver (он расширяет класс трансляции) дл...

1  Libgdx setscreen () сбивает игру, когда сделано несколько раз  ( Libgdx setscreen crashes game when done multiple times ) 
У меня есть <код> GameScreen и после окончания уровня, я устанавливаю экран обратно в <код> GameScreen как перезапустить , когда пользовательская кнопка пе...

3  Добавление музыки / звука в программы Java  ( Adding music sound to java programs ) 
Я делаю несколько мини Java Games, и мне было интересно, как я могу добавить звук / музыку в свои программы. Я смотрел видео на YouTube и последовал за предос...

0  Никогда не заканчивает финал, пока цикла  ( Never finishes final while loop ) 
У меня есть задание, где я в основном должен написать небольшой ботнет. Нам дали список пользователей и зашифрованные пароли. Нам также дали код для расшифров...

4  Ссылка метода против лямбда экспрессия  ( Method reference vs lambda expression ) 
Я хочу заменить лямбда выражение по ссылке метода в примере ниже: <код> public class Example { public static void main(String[] args) { ...

0  Можем ли мы проверить, что текст в поле «Пароль» отображается в маске? [закрыто]  ( Can we check that text in password field is displayed masked ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт . Этот вопрос нуждается в Детали или ясность . В настоящее...

1  Я хочу, чтобы мой NPC посмотреть в направлении, на котором я стою. Как бы я сделал это наиболее эффективно?  ( I want my npc to look in the direction i am standing at how would i do this mos ) 
В настоящее время я строю 2D игру с Slick2D, и сейчас я реализую свой первый NPC. У меня уже есть спрайты, я смог нарисовать его, были столкновения, и так д...

427  Что означает «не может найти символ» или «не может разрешить символ» ошибка?  ( What does a cannot find symbol or cannot resolve symbol error mean ) 
Пожалуйста, объясните следующее о «не можете найти символ», - не может разрешить ошибки символа «или« символ не найден »: . Что они имеют в виду? Что може...

-1  Как установить Jlint-3.0 на Ubuntu 14.04.2? [Дубликат]  ( How to install jlint 3 0 on ubuntu 14 04 2 ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

Связанный проблема

10  Может ли javafx filechooser "запомнить" последний каталог, который он открыл? 
0  Java Applet Рисование формы на входе пользователя 
26  Как добавить кнопку в ряд jtable в качелях java 
0  Прокрутите вверх относительной макета при прокрутке вверх по просмотру 
1  Неправильное количество прошедших args, но я передаю правильную сумму 
0  Не могу найти какие-либо рабочие примеры использования официального Google Translate Java API (Rev41) 
-3  Как прекратить воспроизведение сервиса в Android 
1  Libgdx setscreen () сбивает игру, когда сделано несколько раз 
3  Добавление музыки / звука в программы Java 
0  Никогда не заканчивает финал, пока цикла 
4  Ссылка метода против лямбда экспрессия 
0  Можем ли мы проверить, что текст в поле «Пароль» отображается в маске? [закрыто] 
1  Я хочу, чтобы мой NPC посмотреть в направлении, на котором я стою. Как бы я сделал это наиболее эффективно? 
427  Что означает «не может найти символ» или «не может разрешить символ» ошибка? 
-1  Как установить Jlint-3.0 на Ubuntu 14.04.2? [Дубликат] 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.