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

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

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

谢谢。

8 Solutions collect form web for “Java – 在HashMap中获取密钥的索引?”

使用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; } 

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

  • 可变的hashmap键是一个危险的做法吗?
  • 使用JSTL <c:forEach>标记遍历List和Map的元素
  • 将对象数组转换为哈希映射,由对象的属性值进行索引
  • 在Java地图中查找与最大值关联的密钥
  • Python字典键。 “在”复杂性
  • Java中的HashMap实现。 水桶指数计算如何工作?
  • Java如何在HashMap或HashTable中订购商品?
  • 如何更新一个值,给定一个java hashmap中的键?
  • 在散列中交换键和值
  • 在Ruby中将数组转换为哈希的最佳方法是什么?
  • 如何从哈希表中返回键列表?