Java - 获取 HashMap 中键的索引?

问题描述 投票:0回答:11

在java中,如果我循环遍历

keySet()
HashMap
,我如何(在循环内)获取该键的数字索引?

基本上,当我循环遍历地图时,我希望能够获得 0,1,2...我认为这比声明 int 并在每次迭代时递增更干净。

谢谢。

java iteration hashmap
11个回答
60
投票

使用LinkedHashMap代替HashMap 当调用 keySet() 时,它总是以相同的顺序(与插入)返回键

更多细节请参见LinkedHashMap类


49
投票

不确定这是否是任何“清洁剂”,但是:

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

21
投票

HashMap 没有定义键的顺序。


14
投票

如果您想要做的只是从哈希映射本身获取值,您可以执行如下操作:

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
投票

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


5
投票

简单地说,基于哈希的集合没有索引,因此您必须手动执行。


4
投票

将此作为@Binil Thomas 答案的同等可行替代方案发布 - 尝试将其添加为评论,但不相信其可读性。

int index = 0;

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

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


3
投票

我最近正在学习 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
投票

我不知道这是你要找的吗

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

0
投票

您可以直接在

Set<K> keySet()
获取钥匙。

val teamMember = hashMapOf(
            "Coach" to "manager",
            "Player Coach" to "editor",
            "Player" to "member",
            "Supporter" to "readonly"
        )

teamMember.keys.forEachIndexed { index, key ->
   // Here is your key in string 
}

0
投票
 for( String key : map.keySet()) {
             if(key.equals("j")) {
                 System.out.println(key.hashCode() & map.size() >> 1);
             }
         }
© www.soinside.com 2019 - 2024. All rights reserved.