JAVA & Map集合详解

举报
爱吃香蕉的阿豪 发表于 2023/11/04 22:37:09 2023/11/04
【摘要】 Map集合是一种双列集合,每个元素包含两个数据Map集合的每个元素的格式:Key = value(键值对元素)Map集合也叫 “键值对集合”Map集合非常适合做类似于购物车这样的业务场景 Map的键: 无序、不重复、无索引Map的值: 可重复Map集合后面重复的键对应的值会覆盖前面重复键的值Map集合的键值可以为null 先获取Map集合的全部键的Set集合遍历键的se

目录

前言

一、Map概述

1.Map与collection格式的区别

2.Map集合体系

3.Map集合体系的特点

4.Map实现类的特点

二、实现类

1.Hash Map:

2.LinkedHashMap:

3.TreeMap:

三、Map集合遍历

 遍历方式1:键找值

 遍历方式2:Lambda

总结


前言

Map集合是一种双列集合,每个元素包含两个数据

Map集合的每个元素的格式:Key = value(键值对元素)

Map集合也叫 “键值对集合”

Map集合非常适合做类似于购物车这样的业务场景



一、Map概述

1.Map与collection格式的区别

collection集合的格式:[元素1, 元素2, 元素3..]

Map集合的完整格式:{Key1 = value1, Key2 = value2, Key3 = value3, . . .}


2.Map集合体系


3.Map集合体系的特点

Map的键: 无序、不重复、无索引

Map的值: 可重复

Map集合后面重复的键对应的值会覆盖前面重复键的值

Map集合的键值可以为null


4.Map实现类的特点



二、实现类

1.Hash Map:

键:无序、不重复、无索引 值:不做要求、可重复

public static void main(String[] args) {
    Map<String,Integer>  maps  =  new  HashMap<>();
    maps.put("练习本", 2);
    maps.put("橡皮擦", 2);
    maps.put("圆珠笔", 4);
    maps.put("练习本", 5);		  //覆盖前面的数据
    maps.put(null, null);		//键值可以为null
    System.out.println(maps);
}

输出:

{null=null, 橡皮擦=2, 练习本=5, 圆珠笔=4}


2.LinkedHashMap:

键:有序、不重复、无索引 值:不做要求、可重复

3.TreeMap:

键:排序、不重复、无索引 值:不做要求、可重复

可排序:按照键数据的大小默认排序(由小到大)排序,只能对键进行排序

Tree Map集合一定要排序,可以默认排序,也可以将键按照指定规则进行排序

Tree Map跟Tree Set底层原理一样


Tree Map集合自定义排序

1.类实现Comparable接口,重写比较规则

2.集合自定义Comparable比较器对象,重写比较规则


public static void main(String[] args) {
        Map<Integer, String> names = new TreeMap<>();
        names.put(1,"ads");
        names.put(3,"gdf");
        names.put(2,"eac");
        System.out.println(names);
    }

输出:

{1=ads, 2=eac, 3=gdf}



三、Map集合遍历

 遍历方式1:键找值

public static void main(String[] args) {
    Map<String, Integer> maps = new LinkedHashMap<>();
    maps.put("练习本", 2);
    maps.put("橡皮擦", 2);
    maps.put("圆珠笔", 4);
    maps.put("漫画书", 6);
    maps.put("文件夹", 1);
    System.out.println(maps);
    //{练习本=2, 橡皮擦=2, 圆珠笔=4, 漫画书=6, 文件夹=1}

    //拿到集合的全部键
    Set<String>  keys = maps.keySet();
    
    //遍历:根据键提取值
    for (String key : keys) {
        int value = maps.get(key);
        System.out.println(key + ":" + value);
    /*  输出:
            练习本:2
            橡皮擦:2
            圆珠笔:4
            漫画书:6
            文件夹:1
     */
    }
}


先获取Map集合的全部键的Set集合

遍历键的set集合,通过键提取对应值


涉及到API


 遍历方式2:Lambda

public static void main(String[] args) {
        Map<String, Integer> maps = new LinkedHashMap<>();
        maps.put("练习本", 2);
        maps.put("橡皮擦", 2);
        maps.put("圆珠笔", 4);
        maps.put("漫画书", 6);
        maps.put("文件夹", 1);
        System.out.println(maps);
        //{练习本=2, 橡皮擦=2, 圆珠笔=4, 漫画书=6, 文件夹=1}
    
		//简化前
        maps.forEach(new BiConsumer<String, Integer>() {
            @Override
            public void accept(String kk, Integer vv) {
                System.out.println(kk + vv);
            }
        });
    
		//简化后
       maps.forEach(( k, v) ->{System.out.println(k + v);});
    }


maps.forEach(( k, v) ->{System.out.println(k + v);}); 


总结

Set的元素不可重复,Map的键不可重复,如果存入重复元素如何处理

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。