Ответ 1
Использовать LinkedHashMap вместо HashMap Он всегда будет возвращать ключи в том же порядке (как вставка) при вызове keySet()
Подробнее см. Класс LinkedHashMap
В java, если я перебираю keySet()
в HashMap
, как я (внутри цикла), получаю числовой индекс этого ключа?
В принципе, когда я прокручиваю карту, я хочу получить 0,1,2... Я полагаю, что это было бы чище, чем объявлять int и увеличивать каждую итерацию.
Спасибо.
Использовать LinkedHashMap вместо HashMap Он всегда будет возвращать ключи в том же порядке (как вставка) при вызове keySet()
Подробнее см. Класс LinkedHashMap
Не уверен, что это "очиститель", но:
List keys = new ArrayList(map.keySet());
for (int i = 0; i < keys.size(); i++) {
Object obj = keys.get(i);
// do stuff here
}
HashMap не имеет определенного порядка ключей.
Если все, что вы пытаетесь сделать, это получить значение из самого хэшмапа, вы можете сделать что-то вроде следующего:
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
}
Как сообщество, мы могли бы дать вам лучшие/более подходящие ответы, если бы у нас возникла идея, почему вам нужны индексы или что вы считаете, что индексы могут сделать для вас.
Вы не можете - набор неупорядочен, поэтому индекс не указан. Вы должны объявить int, как вы говорите. Просто помните, что при следующем вызове keySet() вы не обязательно получите результаты в том же порядке.
Проще говоря, коллекции на основе хэшей не индексируются, поэтому вам нужно сделать это вручную.
Недавно я изучал концепции, стоящие за Хашмапом, и было ясно, что не было определенного заказа ключей. Для итерации вы можете использовать:
Hashmap<String,Integer> hs=new Hashmap();
for(Map.Entry<String, Integer> entry : hs.entrySet()){
String key=entry.getKey();
int val=entry.getValue();
//your code block
}
Проводя это как не менее жизнеспособную альтернативу ответу @Binil Thomas, попытался добавить его в качестве комментария, но не был уверен в его удобочитаемости.
int index = 0;
for (Object key : map.keySet()) {
Object value = map.get(key);
++index;
}
Вероятно, это не помогает оригинальному вопросу, так как это буквальная ситуация, которую они пытались избежать, но может помочь другим найти легкий ответ.