Java中如何遍历Map对象
方法一:使用map.entrySet()来遍历。这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要的时候使用。
Map<String,String> map = new HashMap<String,String>();
map.put("lw","666");
map.put("lw1","666");
if(map.entrySet().size() > 0){
for(Entry<String,String> entry : map.entrySet()){
System.out.println("Key = "+entry.getKey()+",Value = "+entry.getValue());
}
}
如果你遍历的是一个空的map对象,for-each循环将抛出NullPointerException,因此在遍历前你总是先判空处理。发现得到的元素不是按照之前加入HashMap的顺序输出的,这个问题我之前倒是没有注意过,后来上网查了一下原因,发现是:HashMap散列图、Hashtable散列表是按“有利于随机查找的散列(hash)的顺序”。并非按输入顺序。遍历时只能全部输出,而没有顺序。甚至可以rehash()重新散列,来获得更利于随机存取的内部顺序。
总之,遍历HashMap或Hashtable时不要求顺序输出,即与顺序无关。
可以用java.util.LinkedHashMap 就是按加入时的顺序遍历了。Map<String, String> paramMap = new LinkedHashMap <String, String>();
方法二:如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet()。
for(String key : map.keySet()){
Sysyem.out.println("key = "+key);
}
for(String value : map.values()){
System.out.println("value = "+value);
}
该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。