Java——集合(Map集合的两种迭代)

一,Map集合的第一种迭代

Map集合的第一种迭代,通过get(key)方法,根据键去获取值
package com.wsq.map;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Demo2_Iterator {
/**
 * 通过查看Map集合的API发现没有Iterator方法,那么双列集合如何迭代呢?
 * Map集合的第一种迭代形式
 * 迭代==遍历
 * */
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();//双列集合,键是String类型,值是Integer类型
        map.put("张三", 23);
        map.put("李四", 24);
        map.put("王五", 25);
        map.put("赵六", 26);


        /*
        //根据键,去获取值  
        Integer wsq = map.get("张三");                //获取map双列集合中的键
        System.out.println(wsq);                    //打印输出map双列结合中的值
        */


        /*
         * ①双列集合的第一种遍历形式,通过迭代器进行遍历
        //获取所有键
        Set<String> keySet = map.keySet();                  //map.keySet():获取所有的键的集合,键是String类型
        Iterator<String> it = keySet.iterator();            //获取迭代器 it
        while(it.hasNext()){                                //判断集合中是否有元素;iterator():如果迭代器具有多个元素,则返回 true
            String key = it.next();                         //获取每一个键,键是String类型;next():返回迭代的下一个元素。
            Integer value = map.get(key);                   //根据键获取值,值是Integer类型;get(key):指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null 
            System.out.println(key + "="  + value );        //打印键和值
        }
        */




        /*
        //②双列集合的第二种遍历形式,使用增强for循环遍历 
        for (String key : map.keySet()) {                   //for(临时变量,也就是想要获取的变量,这里是想要通过键去获取值,String key 表示的是每一个键:容器的名字,这里是 map.ketSet())   map.ketSet()是所有键的集合,拿到所有的键
            System.out.println(key + "=" + map.get(key));   //增强for循环迭代双列集合第一种方式
        }
        */

    }


}

二,Map集合的第二种迭代

Map集合的第二种迭代,根据键值对对象(也就是把键值对当成一个对象),获取键和值
也就是把双列集合的键值对,变成单列集合的键值对对象,然后遍历这个集合,获取每一个键值对对象,根据键值对对象获取键和值

解释一下Map.Entry

package com.wsq.map;

public class Demo4_MapEntry {

    public static void main(String[] args) {

    }

}

interface Inter{
    interface Inter2{
        public void show();
    }
}

class wsq implements Inter.Inter2{//这里的wsq类想继承Inter2,当出现Inter.Inter2,也就是说,Inter2是Inter的内部接口
                                  //同样的道理,Map.Entry,也就是说,Entry是Map里面的一个内部接口
    @Override
    public void show() {          //实现接口要重写人家里面的抽象方法
    }

}
package com.wsq.map;

import java.security.KeyStore.Entry;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Demo3_Iterator {
    /**
     * Map集合的第二种迭代,根据键值对对象,获取键和值
     *  A:键值对对象找键和值思路
     *      * 获取所以键值对对象的集合
     *      * 遍历键值对对象的集合,获取到每一个键值对对象
     *      * 根据键值对对象找键和值
     * */
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("张三", 23);
        map.put("李四", 24);
        map.put("王五", 25);
        map.put("赵六", 26);
        /*
        //①通过迭代器去遍历
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();      //Map.Entry说明Entry是Map的内部接口,将键和值封装成了Entry对象,并存储在Set集合中;遍历双列集合里面存储的都是Entry对象,所以通过迭代器迭代的应该也是Entry对象
        Iterator<Map.Entry<String, Integer>> it = entrySet.iterator();  //通过迭代器去获取每一个对象,<Map.Entry<String, Integer>>泛型的迭代应该一致
        while(it.hasNext()){                                            //hasNext():如果迭代器具有多个元素,则返回 true;通过循环开始获取每一个Entry对象
            Map.Entry<String, Integer> wsq = it.next();                 //①父类引用指向子类对象;这里的wsq就代表每一个Entry对象
          //Entry<String, Integer> wsq = it.next();                     //②直接获取的是子类对象
            String key = wsq.getKey();                                  //Set<Map.Entry<K,V>>下有个getKey():返回与此项对应的键;根据键值对对象获取对应的键
            Integer value = wsq.getValue();                             //Set<Map.Entry<K,V>>下有个getValue():返回与此项对应的值;根据键值对对象获取对应的值
            System.out.println(key + "=" + value);
        }*/


        /*
        //②通过增强for循环遍历 
        for (Map.Entry<String, Integer> wsq : map.entrySet()) {         //for(定义一个临时变量的数据类型跟Entry对象的数据类型一致也就是Map.Entry<String, Integer> wsq代表每一个键值对象 :  )
            System.out.println(wsq.getKey() + "=" + wsq.getValue());    //通过键值对象来获取它里面的getKey()和getValue();getKey():返回与此项对应的键   getValue():返回与此项对应的值
        }*/

    }

}

猜你喜欢

转载自blog.csdn.net/qq_41264055/article/details/81216532