JAVA & Map集合详解

简介: Map集合是一种双列集合,每个元素包含两个数据Map集合的每个元素的格式:Key = value(键值对元素)Map集合也叫 “键值对集合”Map集合非常适合做类似于购物车这样的业务场景 Map的键: 无序、不重复、无索引Map的值: 可重复Map集合后面重复的键对应的值会覆盖前面重复键的值Map集合的键值可以为null 先获取Map集合的全部键的Set集合遍历键的set集合,通过键提取对应值涉及到API...............

目录

前言

一、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集合体系

image.gif

3.Map集合体系的特点

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

Map的值: 可重复

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

Map集合的键值可以为null

4.Map实现类的特点

image.gif编辑


二、实现类

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);
}

image.gif

输出:

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

2.LinkedHashMap:

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

image.gif

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);
    }

image.gif

输出:

{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
     */
    }
}

image.gif

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

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

涉及到API

image.gif编辑

遍历方式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);});
    }

image.gif

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

image.gif


总结

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

目录
相关文章
|
21天前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
39 3
|
3月前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
96 2
|
1月前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
49 5
|
2月前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
56 4
|
2月前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
47 2
|
2月前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
2月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
2月前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
2月前
|
Java 开发者
从 Java 中的 Set 集合中删除元素
【10月更文挑战第30天】
|
2月前
|
存储 Java API
Java交换map的key和value值
通过本文介绍的几种方法,可以在Java中实现Map键值对的交换。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。对于简单的键值对交换,可以使用简单遍历法或Java 8的Stream API;对于需要处理值不唯一的情况,可以使用集合存储或Guava的Multimap。希望本文对您理解和实现Java中的Map键值对交换有所帮助。
54 1