暑期JAVA学习(13)Map集合体系

Map集合体系

一、Map集合的概述

(1)Map集合概述和使用

●Map集合是一种双列集合,每个元素包含两个数据。
●Map集合的每个元素的格式:key=value(键值对元素)。
●Map集合也被称为”键值对集合“
●键和值一一对应,一个键对应一个值,整个集合的特点是由键决定的

(2)Map集合整体格式

●Collection集合的格式: [元素1,元素2,元素3…]
●Map集合的完整格式: {key1=value1 , key2=value2 , key3=value3 …}
在这里插入图片描述

(3)Map集合的使用场景之一:购物车系统

分析:
●购物车提供的每个商品和购买的数量在后台需要容器存储。
●每个商品对象都一一对应一个购买数量。
●把商品对象看成是Map集合的建,购买数量看成Map集合的值。
●{商品1=2,商品2=3,商品3=2 ,商品4=3}

(4)总结

Map集合是什么?使用场景是什么样的?
●Map集合是键值对集合
●Map集合非常适合做类购物车这样的业务场景。

二、Map集合特点

在这里插入图片描述
说明:
●使用最多的Map集合是HashMap。
●重点掌握HashMap ,LinkedHashMap , TreeMap。

(1)Map集合体系特点

●Map集合的特点都是由键决定的。
●Map集合的键是无序,不重复的,无索引的,值不做要求(可以重复)。
●Map集合后面重复的键对应的值会覆盖前面重复键的值。
●Map集合的键值对都可以为null。

(2)Map集合实现类特点
①HashMap:

元素按照键是无序,不重复,无索引,值不做要求。(与Map体系一致)
在这里插入图片描述

②LinkedHashMap

元素按照键是有序,不重复,无索引,值不做要求。
在这里插入图片描述

③TreeMap

元素按照建是排序,不重复,无索引的,值不做要求。

三、Map集合常用API

(1)Map集合API如下

●Map是双列集合的祖宗接口,它的功能是全部双列集合都可以继承使用的。
Map API如下:

方法名称说明
V put(K key,V value )添加元素
V remove(Object key)根据键删除键值对元素
void clear()移除所有的键值对元素
boolean containsKey(0bject key)判断集合是否包含指定的键
boolean containsValue(0bject value)判断集合是否包含指定的值
boolean isEmpty()判断集合是否为空
int size()集合的长度,也就是集合中键值对的个数
(2)Map集合API实际使用

1.添加元素:无序,不重复,无索引。
2.清空集合
3.判断集合是否为空,为空返回true ,反之!
4.根据键获取对应值:public V get(Object key)
5.根据键删除整个元素。(删除键会返回键的值)
6.判断是否包含某个键,包含返回true ,反之
7. 判断是否包含某个值。
8. 获取全部键的集合: public Set keySet()
9. 获取全部值的集合: Collection values();
10. 集合的大小
11. 合并其他Map集合。(拓展)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

    public static void main(String[] args) {
        // 1.添加元素:无序,不重复,无索引。
        Map<String,Integer> maps = new HashMap<>();
        maps.put ("iphoneX",10);
        maps.put("娃娃",31);
        maps.put ("iphoneX",100);// Map集合后面重复的键对应的元素会覆盖前面重复的整个元素!
        maps.put("huawei",1000);
        maps.put("生活用品",10);
        maps.put("手表",10);
        System.out.println(maps);
        //{huawei=1000, 手表=10, 生活用品=10, iphoneX=100, 娃娃=31}
        System.out.println("----------------------------------------------------------");

        // 2.清空集合
        maps.clear();
        System.out.println(maps);//{}
        System.out.println("----------------------------------------------------------");

        // 3.判断集合是否为空,为空返回true ,反之!
        System.out.println(maps.isEmpty());//true
        System.out.println("----------------------------------------------------------");

        Map<String,Integer> maps1 = new HashMap<>();
        maps1.put ("iphoneX",10);
        maps1.put("娃娃",31);
        maps1.put ("iphoneX",100);// Map集合后面重复的键对应的元素会覆盖前面重复的整个元素!
        maps1.put("huawei",1000);
        maps1.put("生活用品",10);
        maps1.put("手表",10);
        System.out.println(maps1);
        System.out.println("----------------------------------------------------------");

        // 4.根据键获取对应值:public V get(Object key)
        Integer key = maps1.get("娃娃");
        System.out.println(key);//31
        System.out.println(maps1.get("huawei"));//1000
        System.out.println(maps1.get("vivo"));//null
        System.out.println("----------------------------------------------------------");

        // 5.根据键删除整个元素。(删除键会返回键的值)
        System.out.println(maps1.remove("huawei"));//1000
        System.out.println(maps1);
        //{手表=10, 生活用品=10, iphoneX=100, 娃娃=31}
        System.out.println("----------------------------------------------------------");

        // 6.判断是否包含某个键,包含返回true ,反之
        System.out.println(maps1.containsKey("huaiwei"));//false
        System.out.println(maps1.containsKey("娃娃"));//true
        System.out.println("----------------------------------------------------------");

        // 7. 判断是否包含某个值。
        System.out.println(maps1.containsValue(50));//false
        System.out.println(maps1.containsValue(10));//true
        System.out.println("----------------------------------------------------------");

        // 8.获取全部键的集合: public Set<K> keySet()
        Set<String> keys = maps1.keySet();
        System.out.println(keys);//[手表, 生活用品, iphoneX, 娃娃]
        System.out.println(maps1.keySet());//[手表, 生活用品, iphoneX, 娃娃]
        System.out.println("----------------------------------------------------------");

        // 9.获取全部值的集合: Collection<V> values();
        //用Collection不会去重,方便
        Collection<Integer> values = maps1.values();
        System.out.println(values);//[10, 10, 100, 31]
        System.out.println(maps1.values());//[10, 10, 100, 31]
        System.out.println("----------------------------------------------------------");

        //10. 集合的大小
        System.out.println(maps1.size());//4
        System.out.println("----------------------------------------------------------");


        // 11.合并其他Map集合。(拓展)
        Map<String,Integer> maps2 = new HashMap<>();
        maps2.put("one",1);
        maps2.put("two",2);
        maps2.put("three",3);
        Map<String,Integer> maps3 = new HashMap<>();
        maps2.put("three",33);
        maps3.put("four",4);
        maps3.put("five",5);
        maps2.putAll(maps3);//把集合map3的元素拷贝一份到map2中去
        System.out.println(maps2);
        System.out.println(maps3);
    }

四、Map集合的遍历方式一:键找值

(1)键找值步骤

●先获取Map集合的全部键的Set集合。
●遍历键的Set集合,然后通过键提取对应值。

(2)键找值涉及到的API
方法名称说明
Set keySet()获取所有键的集合
V get(Object key)根据键获取值
(3)具体过程

在这里插入图片描述
在这里插入图片描述

    public static void main(String[] args) {
        //添加元素:无序,不重复,无索引。
        Map<String,Integer> maps = new HashMap<>();
        maps.put ("iphoneX",10);
        maps.put("娃娃",31);
        maps.put ("iphoneX",100);// Map集合后面重复的键对应的元素会覆盖前面重复的整个元素!
        maps.put("huawei",1000);
        maps.put("生活用品",10);
        maps.put("手表",10);
        System.out.println(maps);
        //{huawei=1000, 手表=10, 生活用品=10, iphoneX=100, 娃娃=31}

        // 1、键找值:第一步:先拿到集合的全部键。
        Set<String> keys = maps.keySet();
        // 2、第二步:遍历每个键,根据键提取值
        for (String key : keys) {
            int value = maps.get(key);
            System.out.println(key + "====>" + value);
            //huawei====>1000
            //手表====>10
            //生活用品====>10
            //iphoneX====>100
            //娃娃====>31
        }
    }

五、Map集合的遍历方式二:键值对

(1)键找值步骤

●先把Map集合转换成Set集合, Set集合中每个元素都是键值对实体类型了。
●遍历Set集合, 然后提取键以及提取值。

(2)键值对涉及到的APl
方法名称说明
Set<Map.Entry<K,V>> entrySet()获取所有键值对对象的集合
K getKey())获得键
V getValue()获取值
#### (3)具体过程

Set<Map. Entry<String, Integer>> entries = maps. entrySet();
输入起来有点麻烦,可以输入maps. entrySet(),然后使用快捷键:Ctrl + Alt + V(自动补全)
直接把Map集合转为了Set集合
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

    public static void main(String[] args) {
        //添加元素:无序,不重复,无索引。
        Map<String,Integer> maps = new HashMap<>();
        maps.put ("iphoneX",10);
        maps.put("娃娃",31);
        maps.put ("iphoneX",100);// Map集合后面重复的键对应的元素会覆盖前面重复的整个元素!
        maps.put("huawei",1000);
        maps.put("生活用品",10);
        maps.put("手表",10);
        System.out.println(maps);
        //{huawei=1000, 手表=10, 生活用品=10, iphoneX=100, 娃娃=31}

        //{huawei=1000, 手表=10, 生活用品=10, iphoneX=100, 娃娃=31}
        //使用foreach遍历map集合.发现Map集合的键值对元素直接是没有类型的。所以不可以直接foreach遍历集合。
        //把Map集合先转换成Set集合: Set<Map. Entry<K, V>> entrySet();
        //Set<Map.Entry<String, Integer>> entries = maps.entrySet();
        //entries = [ (huawei=1000) ,(手表=10), (生活用品=10), (iphoneX=100), (娃娃=31)]
        //此时键值对元素就有了类型,类型是: Map. Entry<String, Integer>
        //此时可以使用foreach遍历

        //1、把Map集合转换成Set集合
        Set<Map.Entry<String, Integer>> entries = maps.entrySet();

        //2开始遍历
        for (Map.Entry<String, Integer> entry :entries) {
            String key = entry.getKey();
            int value = entry.getValue();
            System.out.println(key + "====>" + value);
            //huawei====>1000
            //手表====>10
            //生活用品====>10
            //iphoneX====>100
            //娃娃====>31
        }
    }

六、Map集合的遍历方式三:lambda表达式

●得益于JDK 8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。

(1)Map结合Lambda遍历的API
方法名称说明
default void forEach(BiConsumer<? super K, ? super V> action)结合lambda遍历Map集合
(2)流程

maps = {huawei=1000,手表: =10,生活用品=10, iphoneX: =100}
在这里插入图片描述

(3)具体过程

在这里插入图片描述
在这里插入图片描述

    public static void main(String[] args) {
        //添加元素:无序,不重复,无索引。
        Map<String,Integer> maps = new HashMap<>();
        maps.put ("iphoneX",10);
        maps.put("娃娃",31);
        maps.put ("iphoneX",100);// Map集合后面重复的键对应的元素会覆盖前面重复的整个元素!
        maps.put("huawei",1000);
        maps.put("生活用品",10);
        maps.put("手表",10);
        System.out.println(maps);
        //{huawei=1000, 手表=10, 生活用品=10, iphoneX=100, 娃娃=31}

//        maps.forEach(new BiConsumer<String, Integer>() {
//            @Override
//            public void accept(String key, Integer value) {
//                System.out.println(key + "====>" + value);
//            }
//        });

        //简化
        maps.forEach((k,v) -> {
                System.out.println(k + "====>" + v);
            });
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呦呦呦欸哟哟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值