迭代-Java-获取HashMap中的键索引?
在Java中,如果我遍历HashMap
的keySet()
,如何(在循环内部)获取该键的数字索引?
基本上,当我遍历地图时,我希望能够得到0,1,2 ...我认为这比声明一个int并随每次迭代递增而干净。
谢谢。
llm asked 2020-08-07T00:30:44Z
8个解决方案
50 votes
使用LinkedHashMap代替HashMap调用keySet()时,它将始终以相同的顺序(如插入)返回键。
有关更多详细信息,请参见Class LinkedHashMap。
45 votes
不知道这是否是“清洁剂”,但是:
List keys = new ArrayList(map.keySet());
for (int i = 0; i < keys.size(); i++) {
Object obj = keys.get(i);
// do stuff here
}
21 votes
HashMap没有定义的键顺序。
12 votes
如果您只是想从哈希图中获取值,则可以执行以下操作:
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
}
作为一个社区,如果我们对您为什么需要索引或索引认为可以为您做些什么有所了解,我们也许可以为您提供更好/更合适的答案。
9 votes
您不能-集合是无序的,因此没有提供索引。 正如您所说,您必须声明一个int值。 请记住,下次调用keySet()时,不一定会获得相同顺序的结果。
5 votes
简而言之,基于哈希的集合不会被索引,因此您必须手动进行。
4 votes
我最近正在学习Hashmap的概念,很明显,键没有明确的顺序。要迭代,您可以使用:
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
}
3 votes
将其发布为@Binil Thomas答案的同样可行的替代方法-尝试将其添加为评论,但并未确信其全部可读性。
int index = 0;
for (Object key : map.keySet()) {
Object value = map.get(key);
++index;
}
由于这是他们试图避免的字面情况,可能对原始问题发帖人没有帮助,但可能会帮助其他人寻找简单的答案。