Map集合的两种遍历方式

Map集合:即 接口Map<K,V> 

map集合的两种取出方式:
    1.Set<k> keyset: 将map中所有的键存入到set集合(即将所有的key值存入到set中), 因为Set具备迭代器,可以进行迭代遍历。 所有可以迭代方式取出所有的链,再根据get方法。获取每一个键对应的值。

        Map 集合的取出原理: 将map集合转成set集合。 再通过迭代器取出
    2. set<Map.Entry<k,v>>  entrySet: 将map集合中的映射关系(即键值对的方式存入到set中)存入到set集合中,而这个关系的数据类型就是:map.entry

    

public class Demo1_Map {
    public static void main(String[] args) {
        Map<String, String> map = new  HashMap<String, String>();
        map.put("01", "张三");
        map.put("02", "李四");
        map.put("03", "王二");
        map.put("04", "马武");
        //将Map集合中的映射关系取出。存放到set集合中.........................
        Set<String> key = map.keySet();
         //for遍历
        System.out.println("for遍历得到数据");
        for(String k:key){
            System.out.println(k+map.get(k));
        }
        //..........................................
        System.out.println("第一种方法得到数据:");
        // 迭代器方法:
         Iterator<String> it =  key.iterator();
         while(it.hasNext()){
             String key2 = it.next();
             String value = map.get(key2);
             System.out.println(key2+value);
         }
      //...........................................................     
       System.out.println("第二种方法获取数据:");
        //将Map集合中的映射键值对取出。存入到Set集合
       Set<Map.Entry<String, String>> entrySet =  map.entrySet();
       Iterator<Map.Entry<String, String>> it2 = entrySet.iterator();
        while(it2.hasNext()){
            Map.Entry<String, String> me = it2.next();
            String  key2 = me.getKey();
            String  value2 = me.getValue();
            System.out.println(key2+"   "+value2);
        }
        
    }
}

 

效果:

以方法一中while为例:

1  while(it.hasNext()){
2              String key2 = it.next();
3              String value = map.get(key2);
4              System.out.println(key2+value);
5              //问题:当把最后一行的key2改变成it.next()时候就会出现问题,只出现两个数据??????
6          }

将上面的代码改成:

1 while(it.hasNext()){
2              System.out.println(it.next()+map.get(it.next()));
3          }

会出现错误:即效果为:

              

 原本是想着简便写的,结果出现错误, 应该是it.next()方法出现问题; 也就是while一次循环中执行了两次it.next()方法。导致结果出现错误。

 以后再写代码中,要注意一些方法多次使用会不会影响所需要的效果

 

posted @ 2015-07-07 23:28  浮世薄凉  阅读(1895)  评论(0编辑  收藏  举报