在java中,如果我循环遍历
keySet()
的HashMap
,我如何(在循环内)获取该键的数字索引?
基本上,当我循环遍历地图时,我希望能够获得 0,1,2...我认为这比声明 int 并在每次迭代时递增更干净。
谢谢。
使用LinkedHashMap代替HashMap 当调用 keySet() 时,它总是以相同的顺序(与插入)返回键
更多细节请参见LinkedHashMap类
不确定这是否是任何“清洁剂”,但是:
List keys = new ArrayList(map.keySet());
for (int i = 0; i < keys.size(); i++) {
Object obj = keys.get(i);
// do stuff here
}
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() 时,您不一定会以相同的顺序获得结果。
简单地说,基于哈希的集合没有索引,因此您必须手动执行。
将此作为@Binil Thomas 答案的同等可行替代方案发布 - 尝试将其添加为评论,但不相信其可读性。
int index = 0;
for (Object key : map.keySet()) {
Object value = map.get(key);
++index;
}
可能对原始问题发布者没有帮助,因为这是他们试图避免的字面情况,但可能会帮助其他人寻找简单的答案。
我最近正在学习 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
}
我不知道这是你要找的吗
List keys = new ArrayList(map.keySet());
int index = keys.indexOf(element);
您可以直接在
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
}
for( String key : map.keySet()) {
if(key.equals("j")) {
System.out.println(key.hashCode() & map.size() >> 1);
}
}