Java – 在HashMap中获取密钥的索引?
在Java中,如果我正在循环HashMap
的keySet()
,我怎么(在循环内),获取该键的数字索引?
基本上,当我通过地图循环,我想能够得到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; }
可能不会帮助原来的问题海报,因为这是他们试图避免的字面情况,但可以帮助其他人寻找一个简单的答案。