Java-在HashMap中获取键的索引?
在java中,如果我在Java-在HashMap中获取键的索引?,java,iteration,hashmap,Java,Iteration,Hashmap,在java中,如果我在HashMap的keySet()上循环,我如何(在循环中)获取该键的数字索引 基本上,当我在映射中循环时,我希望能够得到0,1,2…我认为这比声明一个int并随着每次迭代而递增更干净 谢谢。简单地说,基于散列的集合没有索引,因此您必须手动执行。散列映射没有定义键的顺序。您不能-集合是无序的,因此没有提供索引。正如您所说,您必须声明一个int。请记住,下次调用keySet()时,不一定会以相同的顺序得到结果。不确定这是否“更干净”,但是: List keys=new Arra
HashMap
的keySet()
上循环,我如何(在循环中)获取该键的数字索引
基本上,当我在映射中循环时,我希望能够得到0,1,2…我认为这比声明一个int并随着每次迭代而递增更干净
谢谢。简单地说,基于散列的集合没有索引,因此您必须手动执行。散列映射没有定义键的顺序。您不能-集合是无序的,因此没有提供索引。正如您所说,您必须声明一个int。请记住,下次调用keySet()时,不一定会以相同的顺序得到结果。不确定这是否“更干净”,但是:
List keys=new ArrayList(map.keySet());
对于(int i=0;i
如果您只想从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
}
for(Map.Entry:Map.entrySet()){
Object key=entry.getKey();
对象值=entry.getValue();
//TODO:其他很酷的东西
}
作为一个社区,如果我们知道您为什么需要索引,或者您认为索引可以为您做些什么,我们可能会给您提供更好/更合适的答案。使用LinkedHashMap而不是HashMap 调用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
}
Hashmap hs=newhashmap();
对于(Map.Entry:hs.entrySet()){
String key=entry.getKey();
int val=entry.getValue();
//你的代码块
}
将此作为@Binil Thomas答案的一个同样可行的替代方案发布-试图将其添加为评论,但不相信其可读性
int index = 0;
for (Object key : map.keySet()) {
Object value = map.get(key);
++index;
}
可能对最初的问题海报没有帮助,因为这是他们试图避免的实际情况,但可能有助于其他人寻找简单的答案。我不知道这是你想要的吗
List keys = new ArrayList(map.keySet());
int index = keys.indexOf(element);
你需要它做什么?正如答案中提到的,映射中的顺序不一定是恒定的,当添加或删除键时,它可能会发生变化。更好的是,两个相等的哈希映射仍然可以具有不同的顺序。即使他们有相同的添加/删除历史记录,他们也可以这样做(不同的能力可以做到)。如果OP真的想要这样做,那么编写一个由树集和映射支持的集合并不困难。这样,您可以始终以相同的顺序获得结果。现在,当映射在迭代过程中被修改时,如何表现取决于OP,但是一个数据结构是一个映射,其中键位于一个有序的集合中,这是绝对可行的。(顺便说一句,我更多的是评论你的答案,而不是OP的问题)。这个答案是错误的。虽然集合本身是未排序的,但LinkedHashMap确实保持了插入顺序,因此在迭代时,可以将其索引为based,或者类似地:
int index=0;对于(Object key:map.keySet()){
Object value=map.get(key);++index;}//dang格式顺序可能并不重要-例如,我们可能只需要测试第一个或最后一个读取对。在这种情况下,推荐的数据结构是什么?但是LinkedHashMap会这样做
List keys = new ArrayList(map.keySet());
int index = keys.indexOf(element);