迭代-Java-获取HashMap中的键索引?

在Java中,如果我遍历HashMapkeySet(),如何(在循环内部)获取该键的数字索引?

基本上,当我遍历地图时,我希望能够得到0,1,2 ...我认为这比声明一个int并随每次迭代递增而干净。

谢谢。

llm asked 2020-08-07T00:30:44Z
8个解决方案
50 votes

使用LinkedHashMap代替HashMap调用keySet()时,它将始终以相同的顺序(如插入)返回键。

有关更多详细信息,请参见Class LinkedHashMap。

trayzey answered 2020-08-07T00:30:54Z
45 votes

不知道这是否是“清洁剂”,但是:

List keys = new ArrayList(map.keySet());
for (int i = 0; i < keys.size(); i++) {
    Object obj = keys.get(i);
    // do stuff here
}
Binil Thomas answered 2020-08-07T00:31:14Z
21 votes

HashMap没有定义的键顺序。

Matthew Flaschen answered 2020-08-07T00:31:34Z
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
}

作为一个社区,如果我们对您为什么需要索引或索引认为可以为您做些什么有所了解,我们也许可以为您提供更好/更合适的答案。

aperkins answered 2020-08-07T00:32:03Z
9 votes

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

Kris Jenkins answered 2020-08-07T00:32:23Z
5 votes

简而言之,基于哈希的集合不会被索引,因此您必须手动进行。

Esko answered 2020-08-07T00:32:43Z
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  
  }
Neelesh Salian answered 2020-08-07T00:33:03Z
3 votes

将其发布为@Binil Thomas答案的同样可行的替代方法-尝试将其添加为评论,但并未确信其全部可读性。

int index = 0;

for (Object key : map.keySet()) {
   Object value = map.get(key);
   ++index;
}

由于这是他们试图避免的字面情况,可能对原始问题发帖人没有帮助,但可能会帮助其他人寻找简单的答案。

Benjineer answered 2020-08-07T00:33:27Z
translate from https://stackoverflow.com:/questions/2686092/java-get-index-of-key-in-hashmap