Map系列集合

一.双列集合的特点:

1.一对一对的添加;

2.元素名称:

3.键和值一一对应

4.一对键和值称为:键值对/键值对对象/Entry

5.总结:


二.Map集合常用的API:

1.Map集合体系:

2.API:

3.API举例:

注:Map集合是接口(不能实例化,只能创建实现类对象-->不能new Map),

而且存的是一对对象(键和值)-->泛型要写两个

1)put操作:
package com.itheima.a01myMap;
​
import java.util.HashMap;
import java.util.Map;
​
public class A01_MapDemo1 {
    public static void main(String[] args) {
        //1.创建Map集合的对象
        Map<String,String> m=new HashMap<>();
​
        //2.添加元素
        m.put("郭靖","黄蓉");
        m.put("韦小宝","沐剑屏");
        m.put("尹志平","小龙女");
​
        m.put("韦小宝","双儿");
​
        //3.打印集合
        System.out.println(m);
         /*运行结果为{韦小宝=双儿, 尹志平=小龙女, 郭靖=黄蓉},
           覆盖了韦小宝=沐剑屏*/
    }
}
package com.itheima.a01myMap;
​
import java.util.HashMap;
import java.util.Map;
​
public class A01_MapDemo1 {
    public static void main(String[] args) {
        //1.创建Map集合的对象
        Map<String,String> m=new HashMap<>();
​
        //2.添加元素
         /* put方法的细节:
             put有添加和覆盖两种情况
            1.在添加数据时,如果键不存在,那么直接把键值对对象添加到map集合当中
            2.在添加数据时,如果键存在,那么会把原有的键值对对象覆盖,会把被覆盖的值进行返回 
          */
        m.put("郭靖","黄蓉");
        m.put("韦小宝","沐剑屏");
        m.put("尹志平","小龙女");
​
        String value = m.put("韦小宝", "双儿");
        System.out.println(value);//value的值为沐剑屏(沐剑屏为被覆盖的值)
​
​
        //3.打印集合
        System.out.println(m);
         /*运行结果为{韦小宝=双儿, 尹志平=小龙女, 郭靖=黄蓉},
           覆盖了韦小宝=沐剑屏*/
    }
}
​
package com.itheima.a01myMap;
​
import java.util.HashMap;
import java.util.Map;
​
public class A01_MapDemo1 {
    public static void main(String[] args) {
        //1.创建Map集合的对象
        Map<String,String> m=new HashMap<>();
​
        //2.添加元素
         /* put方法的细节:
             put有添加和覆盖两种情况
            1.在添加数据时,如果键不存在,那么直接把键值对对象添加到map集合当中,方法返回null(因为此时只添加,没覆盖数据,所以返回null)
            2.在添加数据时,如果键存在,那么会把原有的键值对对象覆盖,会把被覆盖的值进行返回
          */
        String value1=m.put("郭靖","黄蓉");
        System.out.println(value1);//value1的值为null
        m.put("韦小宝","沐剑屏");
        m.put("尹志平","小龙女");
​
        String value2 = m.put("韦小宝", "双儿");
        System.out.println(value2);//value2的值为沐剑屏(沐剑屏为被覆盖的值)
​
​
        //3.打印集合
        System.out.println(m);
         /*运行结果为{韦小宝=双儿, 尹志平=小龙女, 郭靖=黄蓉},
           覆盖了韦小宝=沐剑屏*/
    }
}
 
2)删除(remove)操作:
package com.itheima.a01myMap;
​
import java.util.HashMap;
import java.util.Map;
​
public class A01_MapDemo1 {
    public static void main(String[] args) {
        //1.创建Map集合的对象
        Map<String,String> m=new HashMap<>();
​
        //2.添加元素
        m.put("郭靖","黄蓉");
        m.put("韦小宝","沐剑屏");
        m.put("尹志平","小龙女");
​
        //3.删除操作(注:是根据键删除键值对元素,返回值)
        String result = m.remove("郭靖");
        System.out.println(result);//运行结果为黄蓉(黄蓉为值)
​
        //4.打印集合
        System.out.println(m);//运行结果为{韦小宝=沐剑屏, 尹志平=小龙女}
    }
}
​
3)清空(clear)操作:
package com.itheima.a01myMap;
​
import java.util.HashMap;
import java.util.Map;
​
public class A01_MapDemo1 {
    public static void main(String[] args) {
        //1.创建Map集合的对象
        Map<String,String> m=new HashMap<>();
​
        //2.添加元素
        m.put("郭靖","黄蓉");
        m.put("韦小宝","沐剑屏");
        m.put("尹志平","小龙女");
​
        //3.清空操作
        m.clear();
​
        //4.打印集合
        System.out.println(m);//运行结果为{}
    }
}
​
4)判断是否包含键/值:
package com.itheima.a01myMap;
​
import java.util.HashMap;
import java.util.Map;
​
public class A01_MapDemo1 {
    public static void main(String[] args) {
        //1.创建Map集合的对象
        Map<String,String> m=new HashMap<>();
​
        //2.添加元素
        m.put("郭靖","黄蓉");
        m.put("韦小宝","沐剑屏");
        m.put("尹志平","小龙女");
​
        //3.判断是否包含键/值
        boolean keyResult=m.containsKey("郭靖");
        System.out.println(keyResult);//运行结果为true,代表存在该键;结果为false代表不存在某个键
​
        boolean valueResult=m.containsValue("小龙女");
        System.out.println(valueResult);//运行结果为true,代表存在该值;结果为false代表不存在某个值
​
        //4.打印集合
        System.out.println(m);//运行结果为{韦小宝=沐剑屏, 尹志平=小龙女, 郭靖=黄蓉}
    }
}
​
5)判断集合是否为空即方法isEmpty:
package com.itheima.a01myMap;
​
import java.util.HashMap;
import java.util.Map;
​
public class A01_MapDemo1 {
    public static void main(String[] args) {
        //1.创建Map集合的对象
        Map<String,String> m=new HashMap<>();
​
        //2.添加元素
        m.put("郭靖","黄蓉");
        m.put("韦小宝","沐剑屏");
        m.put("尹志平","小龙女");
​
        //3.判断集合是否为空
        boolean result = m.isEmpty();
        System.out.println(result);//运行结果为false,代表集合不为空;若运行结果为true,代表集合为空,且长度为0
​
        //4.打印集合
        System.out.println(m);//运行结果为{韦小宝=沐剑屏, 尹志平=小龙女, 郭靖=黄蓉}
    }
}
​
6)size方法,用来得出集合长度:
package com.itheima.a01myMap;
​
import java.util.HashMap;
import java.util.Map;
​
public class A01_MapDemo1 {
    public static void main(String[] args) {
        //1.创建Map集合的对象
        Map<String,String> m=new HashMap<>();
​
        //2.添加元素
        m.put("郭靖","黄蓉");
        m.put("韦小宝","沐剑屏");
        m.put("尹志平","小龙女");
​
        //3.得出集合长度
        int size = m.size();
        System.out.println(size);//运行结果为3
​
        //4.打印集合
        System.out.println(m);//运行结果为{韦小宝=沐剑屏, 尹志平=小龙女, 郭靖=黄蓉}
    }
}
​

三.Map集合的遍历方式:(注:Map集合是无序的)

1.键找值:先获取键,放入单列集合,再遍历该单列集合,通过get方法依次找到对应的值

注:获取键要用到方法keySet()获取值要用到方法get()

  • 图解:

  • 代码实现:

    package com.itheima.a01myMap;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    public class A02_MapDemo2 {
        public static void main(String[] args) {
            //1.创建Map集合的对象
            Map<String,String> map=new HashMap<>();
    
            //2.添加元素
            map.put("尹志平","小龙女");
            map.put("郭靖","穆念慈");
            map.put("欧阳克","黄蓉");
    
            //3.通过键找值
             //3.1:获取所有的键,把这些键放到一个单列集合当中
             Set<String> keys = map.keySet();
             //3.2遍历单列集合去得到每一个键(可以用迭代器,增强for,Lambda表达式forEach)
            for (String key : keys) {
                System.out.println(key);
                //3.3利用Map集合中的键获取对应的值
                String value=map.get(key);
                System.out.println(key+"="+value);
            }
    
        }
    }

    运行结果:

2.依次获取键值对对象(又叫Entry对象):getKey()方法获取键,getValue()方法获取值

通过一个方法(entrySet())获取所有的键值对对象,返回一个Set集合

entrySet()方法:

package com.itheima.a01myMap;

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

public class A03_MapDemo3 {
    public static void main(String[] args) {
        //1.创建Map集合的对象
        Map<String,String> map=new HashMap<>();

        //2.添加元素
        //键:人物的外号;值:人物的名字
        map.put("标枪选手","马超");
        map.put("人物挂件","明世隐");
        map.put("御龙骑士","尹志平");

        //3.通过键值对对象进行遍历集合
         //3.1 通过一个方法(entrySet())获取所有的键值对对象,返回一个Set集合(Set集合里装着所有键值对对象)
         /* Set<Map.Entry<String, String>> entries = map.entrySet();可以
            先打出map.entrySet(),再ctrl+alt+v快速生成;
            Entry为Map接口里的内部接口-->所以要Map.Entry
          */
        Set<Map.Entry<String, String>> entries = map.entrySet();
        /*Set<Entry<String, String>> entries = map.entrySet();也行,
          但上方需要一个导包import java.util.Map.Entry;
        */
        //3.2 遍历entries这个集合,去得到里面的每一个键值对对象
        for (Map.Entry<String, String> entry : entries) {
            //3.3 利用entry调用get方法获取键和值
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+"="+value);
        }
    }
}

运行结果:

3.Lambda表达式:

  • 方法:forEach方法,底层就是利用第二种方式进行遍历,依次得到每一个键和值

    BiConsumer为函数式接口,所以可改用Lambda表达式

  • 代码实现:

    package com.itheima.a01myMap;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.function.BiConsumer;
    
    public class A04_MapDemo4 {
        public static void main(String[] args) {
            //1.创建Map集合的对象
            Map<String,String> map=new HashMap<>();
    
            //2.添加元素
             //键:人物的名字;值:名人名言
            map.put("鲁迅","这句话是我说的");
            map.put("曹操","不可能绝对不可能");
            map.put("刘备","接着奏乐接着舞");
            map.put("柯镇恶","看我眼色行事");
    
            //3.利用Lambda表达式进行遍历
            map.forEach(new BiConsumer<String, String>() {
                @Override
                public void accept(String key, String value) {
                    System.out.println(key+"="+value);
                }
            });
        }
    }

    改为Lambda表达式:

    package com.itheima.a01myMap;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class A04_MapDemo4 {
        public static void main(String[] args) {
            //1.创建Map集合的对象
            Map<String,String> map=new HashMap<>();
    
            //2.添加元素
             //键:人物的名字;值:名人名言
            map.put("鲁迅","这句话是我说的");
            map.put("曹操","不可能绝对不可能");
            map.put("刘备","接着奏乐接着舞");
            map.put("柯镇恶","看我眼色行事");
    
            //3.利用Lambda表达式进行遍历
            map.forEach( (key,value) -> System.out.println(key+"="+value) );
        }
    }

    运行结果为:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值