当我遍历值或键他们将相关?将第二个键映射到第二个值?当使用HashMap时,迭代时保证值和键的顺序是相同的?
9
A
回答
14
不,不一定。你应该真的使用entrySet()。iterator()来达到这个目的。使用此迭代器,您将遍历Map中的所有Map.Entry对象,并可以访问每个键和关联的值。
0
这个问题起初让我困惑,但@Matt把它解决了。
考虑使用entrySet()方法,该方法返回Map上的具有键值对的集合。
Map<Integer, Integer> a = new HashMap<Integer, Integer>(2);
a.put(1, 2);
a.put(2, 3);
for (Map.Entry<Integer, Integer> entry : a.entrySet()) {
System.out.println(entry.getKey() + " => " + entry.getValue());
}
此输出:
1 => 2
2 => 3
3 => 3
2
值()和keySet()都委托给entrySet()迭代器,因此它们将以相同的顺序返回。但是像Alex说的那样,直接使用entrySet()迭代器会更好。
8
使用是的entrySet提到@Cuchullain:
Map<String, String> map = new HashMap<String, String>();
// populate hashmap
for (Map.Entry<String, String> entry : map.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
// your code here
}
7
你想用这个,LinkedHashMap,用于预测的迭代顺序
0
我第二@basszero。虽然
for (Map.Entry<Integer, Integer> entry : a.entrySet())
将工作,我发现使用数据结构,这会自动更好。现在,你可以迭代“正常”
0
HashMap的keySet方法返回一个Set,它不保证顺序。
HashMap的values()方法返回一个Collection,它不保证顺序。
这就是说,问题是“他们会关联”,所以技术上答案可能是,但不要依赖它。
1
我同意pmac72。不要以为你会从无序集合中得到有序的值或键。如果时间久了,这只是纯粹的危险。如果您想要保留订单,请使用LinkedHashMap或TreeMap或公用集合OrderedMap。
3
public class Test {
public static void main(String[] args) {
HashMap <String,String> hashmap = new HashMap<String,String>();
hashmap.put("one", "1");
hashmap.put("two", "2");
hashmap.put("three", "3");
hashmap.put("four", "4");
hashmap.put("five", "5");
hashmap.put("six", "6");
Iterator <String> keyIterator = hashmap.keySet().iterator();
Iterator <String> valueIterator = hashmap.values().iterator();
while(keyIterator.hasNext()) {
System.out.println("key: "+keyIterator.next());
}
while(valueIterator.hasNext()) {
System.out.println("value: "+valueIterator.next());
}
}
}
key: two
key: five
key: one
key: three
key: four
key: six
value: 2
value: 5
value: 1
value: 3
value: 4
value: 6
相关问题
- 1. 两次对相同的HashMap键进行迭代。订单是否保证一致?
- 2. 当用Integer键迭代HashMap时,它是否总是按升序返回键?
- 3. GetAll:键和实体保证是以相同的顺序?
- 4. Java *中的HashSet如何在迭代时不保证顺序?
- 5. 迭代键,HashMap 4的值一次
- 6. (Java)使用Maps时,键和值是否有相同的类型?
- 7. Scala HashMap:迭代插入顺序?
- 8. Python:迭代元组时,顺序是否保留?
- 9. 当从begin()到end()迭代时,STL贴图是否总是给出相同的顺序?
- 10. java.util.ConcurrentModificationException使用struts迭代器迭代hashmap时
- 11. 同时迭代两个相同长度的迭代
- 12. 当数字相同时,保留字母顺序的流的数字排序
- 13. 是否保证在PHP中按照数组顺序迭代foreach?
- 14. 当继续对列表进行排序时,请保持相同值的项目的相对顺序
- 15. 通过迭代以相反的顺序
- 16. 同时迭代HashMap对象是否线程安全?
- 17. 使用console.log(对象)和迭代对象键时JSON键不同使用
- 18. .NET foreach语句是否保证以与构建集合相同的顺序迭代集合?
- 19. 会以相同的顺序回传键和值?
- 20. PHP的UNIX时间戳不迭代到相同的值
- 21. 如何使用HashMap检索和迭代来自java bean的值
- 22. Objective-C中的快速枚举是否保证了迭代的顺序?
- 23. 使用HashMap迭代器
- 24. 更好的办法有一个关键 - 有保证的顺序迭代JavaScript值的关系?
- 25. 是否保证KeyListeners的调用顺序?
- 26. HashMap键和值
- 27. 将HashMap的关键迭代器复制到列表迭代器
- 28. HashMap的,也许原子时得到的,关键是保证已经把完全
- 29. 迭代std :: map的顺序是否已知(并由标准保证)?
- 30. 使用SQL组同时保持相同的varchar值
我认为这就是最初的问题,但听起来像他独立使用.keys()和.values()方法迭代键和值。我不认为在这种情况下LinkedHashMap解决了这个问题 – Matt 2008-09-24 16:04:13
谢谢马特 - 让我感到困惑:)。 – 2008-09-24 16:06:07
在不同的笔记中,您绝对不应该创建一个与预期元素数量相同的HashMap。 HashMaps有一个通常为75%的负载因子。这意味着如果地图已经占满了75%,并且添加了一个元素,它会增加它的大小。 – 2008-09-24 18:42:30