Java - 获取HashMap中的键索引?

llm*_*llm 42 java iteration hashmap

在java中,如果我循环遍历keySet()a HashMap,我如何(在循环内)获取该键的数字索引?

基本上,当我循环遍历地图时,我希望能够得到0,1,2 ...我认为这比声明一个int并且每次迭代递增更清晰.

谢谢.

小智 51

使用LinkedHashMap而不是HashMap当调用keySet()时,它将始终以相同的顺序(作为插入)返回键

有关更多详细信息,请参阅类LinkedHashMap


Bin*_*mas 45

不确定这是否是"更干净",但是:

List keys = new ArrayList(map.keySet());
for (int i = 0; i < keys.size(); i++) {
    Object obj = keys.get(i);
    // do stuff here
}
Run Code Online (Sandbox Code Playgroud)

  • 或类似地:`int index = 0; for(Object key:map.keySet()){`Object value = map.get(key); ++索引; } // dang格式化 (3认同)

Mat*_*hen 21

HashMap没有定义键的顺序.


ape*_*ins 12

如果你要做的就是从hashmap本身中获取值,你可以执行以下操作:

for (Object key : map.keySet()) {
    Object value = map.get(key);
    //TODO: this
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以迭代地图的条目,如果这是您感兴趣的:

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

作为一个社区,如果我们知道您为什么需要索引或者您认为索引可以为您做什么,我们可能会给您更好/更合适的答案.


Kri*_*ins 9

你不能 - 一个集合是无序的,因此没有提供索引.正如你所说,你必须声明一个int.请记住,下次调用keySet()时,您不一定会以相同的顺序获得结果.


Esk*_*sko 5

简而言之,基于散列的集合未编入索引,因此您必须手动执行此操作.