Java – 在HashMap中获取密钥的索引?

在Java中,如果我正在循环HashMapkeySet() ,我怎么(在循环内),获取该键的数字索引?

基本上,当我通过地图循环,我想能够得到0,1,2 …我认为这将比每次迭代声明一个int和增量更清洁。

谢谢。

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

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

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

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

HashMap没有定义键的顺序。

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

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

你不能 – 一个集合是无序的,所以没有提供索引。 就像你说的那样,你将不得不声明一个int。 请记住,下次您调用keySet()时,您不一定会以相同的顺序得到结果。

简而言之,基于散列的集合不会编入索引,因此您必须手动完成。

我最近在学习HashMap背后的概念,显然没有明确的密钥sorting。 迭代你可以使用:

 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 } 

作为@Binil托马斯的答案,这是一个同样可行的替代scheme – 试图添加它作为一个评论,但不相信这一切的可读性。

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

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