一.双列集合的特点:
1.一对一对的添加;
2.元素名称:左 为键 ,右 为值;

3.键和值一一对应;
4.一对键和值称为:键值对 /键值对对象 /Entry;
5.总结:

二.Map集合常用的API:
1.Map集合体系:

2.API:

3.API举例:
注:Map集合是接口(不能实例化,只能创建实现类对象-->不能new Map),
而且存的是一对对象(键和值)-->泛型要写两个


1)put操作:
            
            
              java
              
              
            
          
          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);
         /*运行结果为{韦小宝=双儿, 尹志平=小龙女, 郭靖=黄蓉},
           覆盖了韦小宝=沐剑屏*/
    }
}
        
        
            
            
              java
              
              
            
          
          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);
         /*运行结果为{韦小宝=双儿, 尹志平=小龙女, 郭靖=黄蓉},
           覆盖了韦小宝=沐剑屏*/
    }
}
        
            
            
              java
              
              
            
          
          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)操作:
            
            
              java
              
              
            
          
          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)操作:
            
            
              java
              
              
            
          
          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)判断是否包含键/值:
            
            
              java
              
              
            
          
          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:
            
            
              java
              
              
            
          
          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方法,用来得出集合长度:
            
            
              java
              
              
            
          
          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()
- 
图解:

 - 
代码实现:
javapackage 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()方法:

            
            
              java
              
              
            
          
          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表达式

 - 
代码实现:
javapackage 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表达式:
javapackage 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) ); } }运行结果为:
