Java - 获取HashMap中的键索引?

时间:2010-04-21 19:49:11

标签: java iteration hashmap

在java中,如果我循环遍历keySet()的{​​{1}},我如何(在循环内)获取该密钥的数字索引?

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

感谢。

9 个答案:

答案 0 :(得分:47)

使用LinkedHashMap代替HashMap 调用keySet()

时,它将始终以相同的顺序(作为插入)返回键

有关详细信息,请参阅Class LinkedHashMap

答案 1 :(得分:42)

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

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

答案 2 :(得分:21)

HashMap没有明确的键排序。

答案 3 :(得分:11)

如果您要做的只是从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
}

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

答案 4 :(得分:9)

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

答案 5 :(得分:5)

简单地说,基于散列的集合没有编入索引,所以你必须手动完成。

答案 6 :(得分:4)

我最近在学习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  
  }

答案 7 :(得分:3)

将此作为@Binil Thomas答案同样可行的替代方案 - 试图将其添加为评论,但并不相信这一切的可读性。

int index = 0;

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

可能没有帮助原始问题海报,因为这是他们试图避免的字面情况,但可能会帮助其他人寻找一个简单的答案。

答案 8 :(得分:-1)

我不知道这是你要找的东西

List keys = new ArrayList(map.keySet());
int index = keys.indexOf(element);