DESKTOP-ESBC3OR_20200911-蒋生桃

问题

Map集合的遍历方式?

解决

java.util.Map接口没有继承java.lang.Iterable接口,因此不可以通过迭代器或for-each来直接迭代Map集合

1、获得Map实例中所有的key组成的Set集合,随后迭代key组成的Set集合

        Map<String,Integer> map = Map.of( "牛肉面" , 250 , "炒拉条" , 400 , "茶叶蛋" , 150, "小菜" , 100 );
        
        // 获取所有的key组成的Set集合( Set接口继承了Collection接口)
        Set<String> keys = map.keySet();
        for( String key : keys ) {
            Integer value = map.get( key );
            System.out.println( key + " : " + value );
        }

2、获得Map实例中所有的value组成的Collection集合(被称作值集),随后迭代value组成的Collection集合

        Map<String,Integer> map = Map.of( "牛肉面" , 250 , "炒拉条" , 400 , "茶叶蛋" , 150, "小菜" , 100 );
        
        // 获取所有的value组成的Collection集合( Set接口继承了Collection接口)
        Collection<Integer> values = map.values(); // 获取所有的value
        for( Integer value : values ) {
            System.out.println( value );
        }

3、获得Map实例中所有的Entry组成的Set集合(被称作键值集)

 每个一个Entry实例中都包含了key和value

​ 即使通过遍历Entry组成的Set集合获取到了所有的key-value,但仍然不能说直接迭代了Map集合

        Map<String,Integer> map = Map.of( "牛肉面" , 250 , "炒拉条" , 400 , "茶叶蛋" , 150, "小菜" , 100 );
        
        // 获取所有的Entry组成的Set集合
        Set< Map.Entry<String,Integer> > entrys = map.entrySet();
        Iterator< Map.Entry<String,Integer> > itor = entrys.iterator();
        while( itor.hasNext() ) {
            Map.Entry<String,Integer> entry = itor.next();
            System.out.println( entry.getKey() + " : " + entry.getValue() );
        }

吐槽

最近接口和实现类倒不清楚