map的遍历
第一种:KeySet()
将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 keySet():迭代后只能通过get()取key 。
取到的结果会乱序,是因为取得数据行主键的时候,使用了HashMap.keySet()方法,而这个方法返回的Set结果,里面的数据是乱序排放的。
public class Test1 {
public static void main(String[] args) {
Map map = new HashMap ( );
map.put ("key1", "lisi1");
map.put ("key2", "lisi2");
map.put ("key3", "lisi3");
map.put ("key4", "lisi4");
//先获取map集合的所有键的set集合,keyset()
Iterator it = map.keySet ( ).iterator ( );
//获取迭代器
while (it.hasNext ( )) {
Object key = it.next ( );
System.out.println (map.get (key));
}
}
}
输出:
lisi1
lisi2
lisi3
lisi4
第二种:entrySet()
Set<Map.Entry<K,V>> entrySet() //返回此映射中包含的映射关系的 Set 视图。(一个关系就是一个键-值对),就是把(key-value)作为一个整体一对一对地存放到Set集合当中的。Map.Entry表示映射关系。entrySet():迭代后可以e.getKey(),e.getValue()两种方法来取key和value。返回的是Entry接口。
典型用法如下
public class Test {
public static void main(String[] args) {
Map map = new HashMap ();
map.put("key1","lisi1");
map.put("key2","lisi2");
map.put("key3","lisi3");
map.put("key4","lisi4");
//将map集合中的映射关系取出,存入到set集合
Iterator it = map.entrySet().iterator();
while(it.hasNext()){
Map.Entry e =(Map.Entry) it.next();
System.out.println("键"+e.getKey () + "的值为" + e.getValue());
}
输出:
键key1的值为lisi1
键key2的值为lisi2
键key3的值为lisi3
键key4的值为lisi4
总结:推荐使用第二种方式,即entrySet()方法,效率较高。对于keySet其实是遍历了2次,一次是转为iterator,一次就是从HashMap中取出key所对于的value。而entryset只是遍历了第一次,它把key和value都放到了entry中,所以快了。两种遍历的遍历时间相差还是很明显的。