Java - получает индекс ключа в HashMap?

В Java, если я - цикличное выполнение по keySet() из a HashMap, как делают меня (в цикле), получают числовой индекс того ключа?

В основном, поскольку я циклично выполняюсь через карту, я хочу смочь добраться 0,1,2... Я полагаю, что это было бы более чисто, чем объявление интервала и постепенное увеличение с каждым повторением.

Спасибо.

42
задан llm 21 April 2010 в 19:49
поделиться

5 ответов

HashMap не имеет определенного порядка ключей.

21
ответ дан 26 November 2019 в 23:17
поделиться

Если все, что вы пытаетесь сделать, это получить значение из самой хэш-карты, вы можете сделать что-то вроде следующего:

for (Object key : map.keySet()) {
    Object value = map.get(key);
    //TODO: this
}

Или вы можете перебирать записи на карте, если это то, что вас интересует:

for (Map.Entry<Object, Object> entry : map.entrySet()) {
    Object key = entry.getKey();
    Object value = entry.getValue();
    //TODO: other cool stuff
}

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

12
ответ дан 26 November 2019 в 23:17
поделиться

Вы не можете - набор неупорядочен, поэтому индекс не указан. Как вы говорите, вам нужно будет объявить int. Просто помните, что в следующий раз, когда вы вызовете keySet (), вы не обязательно получите результаты в том же порядке.

9
ответ дан 26 November 2019 в 23:17
поделиться

Не уверен, что это «чище», но:

List keys = new ArrayList(map.keySet());
for (int i = 0; i < keys.size(); i++) {
    Object obj = keys.get(i);
    // do stuff here
}
45
ответ дан 26 November 2019 в 23:17
поделиться

Проще говоря, коллекции на основе хешей не индексируются, поэтому вам придется делать это вручную.

5
ответ дан 26 November 2019 в 23:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: