[英]Java - get index of key in HashMap?
在 java 中,如果我在HashMap
的keySet()
上循环,我如何(在循环内)获取该键的数字索引?
基本上,当我循环遍历 map 时,我希望能够获得 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() 时,您不一定会以相同的顺序获得结果。
简而言之,基于散列的集合没有索引,因此您必须手动进行。
我最近正在学习 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
}
将此作为@Binil Thomas 答案的同样可行的替代方案发布 - 试图将其添加为评论,但不相信这一切的可读性。
int index = 0;
for (Object key : map.keySet()) {
Object value = map.get(key);
++index;
}
可能对原始问题发布者没有帮助,因为这是他们试图避免的字面情况,但可能有助于其他人寻找简单的答案。
您可以直接在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
}
我不知道这是你要找的
List keys = new ArrayList(map.keySet());
int index = keys.indexOf(element);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.