Map集合概述(Java)

本文主要介绍了Java中的Map集合,包括其体系结构、特点、常用API以及三种遍历方式。Map是键值对集合,键无序且不重复,值可以重复。重点讲解了HashMap、LinkedHashMap和TreeMap的特性,以及如何通过键找值、键值对和lambda表达式进行遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Map集合体系

1、Map集合的概述

Map集合概述和使用

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

Map集合整体格式:

Collection集合的格式: [元素1,元素2,元素3…]
Map集合的完整格式:{key1=value1 , key2=value2 , key3=value3 , …}

总结

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

2、Map集合体系特点

Map集合体系

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

Map集合体系特点

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

Map集合实现类特点

HashMap:元素按照键是无序,不重复,无索引,值不做要求。(与Map体系一致)
例:


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

public class MapDemo01 {
    public static void main(String[] args) {
        //1、创建一个对象
        Map<String,Integer> maps=new HashMap<>();
        maps.put("苹果",3);
        maps.put("梨",5);
        maps.put("橘子",1);
        maps.put("苹果",10);
        maps.put(null,null);
        System.out.println(maps);
    }
}

在这里插入图片描述

LinkedHashMap:元素按照键是有序,不重复,无索引,值不做要求。
例:


import java.util.LinkedHashMap;
import java.util.Map;

public class MapDemo01 {
    public static void main(String[] args) {
        //1、创建一个对象
        Map<String,Integer> maps=new LinkedHashMap<>();
        maps.put("苹果",3);
        maps.put("梨",5);
        maps.put("橘子",1);
        maps.put("苹果",10);
        maps.put(null,null);
        System.out.println(maps);
    }
}

在这里插入图片描述

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

3、Map集合常用API

Map集合

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

Map API如下:


例:

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

public class MapDemo02 {
    public static void main(String[] args) {
        //1、添加元素:无序、不重复、无索引
        Map<String,Integer> maps=new HashMap<>();
        maps.put("iphoneX",10);
        maps.put("笔记本",2);
        maps.put("iphoneX",100);//Map集合后面重复的键对应的元素会覆盖前面的元素
        maps.put("华为",1000);
        maps.put("手表",1);
        maps.put("生活用品",10);
        System.out.println(maps);

        // 2.清空集合
//        maps.clear();
//        System.out.println(maps);

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

        // 4.根据键获取对应值:public V get(Object key)
        Integer key = maps.get("华为");
        System.out.println(key);
        System.out.println(maps.get("生活用品")); // 10
        System.out.println(maps.get("生活用品2")); // null

        // 5.根据键删除整个元素。(删除键会返回键的值)
        System.out.println(maps.remove("iphoneX"));
        System.out.println(maps);

        // 6.判断是否包含某个键 ,包含返回true ,反之
        System.out.println(maps.containsKey("笔记本"));  // true
        System.out.println(maps.containsKey("笔记本2"));  // false
        System.out.println(maps.containsKey("iphoneX")); // false

        // 7.判断是否包含某个值。
        System.out.println(maps.containsValue(100));  //
        System.out.println(maps.containsValue(10));  //
        System.out.println(maps.containsValue(22)); //

        // {huawei=100, 手表=10, 生活用品=10, 娃娃=20}
        // 8.获取全部键的集合:public Set<K> keySet()
        Set<String> keys = maps.keySet();
        System.out.println(keys);

        System.out.println("------------------------------");
        // 9.获取全部值的集合:Collection<V> values();
        Collection<Integer> values = maps.values();
        System.out.println(values);

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

        // 11.合并其他Map集合。(拓展)
        Map<String , Integer> map1 = new HashMap<>();
        map1.put("java1", 1);
        map1.put("java2", 100);
        Map<String , Integer> map2 = new HashMap<>();
        map2.put("java2", 1);
        map2.put("java3", 100);
        map1.putAll(map2); // 把集合map2的元素拷贝一份到map1中去
        System.out.println(map1);
        System.out.println(map2);
    }
}

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

键找值

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

键找值涉及到的API:

在这里插入图片描述
例:


import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class MapDemo01 {
    public static void main(String[] args) {
        //1、创建一个对象
        Map<String,Integer> maps=new TreeMap<>();
        maps.put("苹果",3);
        maps.put("梨",5);
        maps.put("橘子",1);
        maps.put("香蕉",10);
        maps.put("菠萝",15);
        System.out.println(maps);

        //键值查找
        //1、先拿到集合的全部键
        Set<String> keys=maps.keySet();
       //2、遍历每个键
        for (String key : keys) {
            int value=maps.get(key);
            System.out.println(key+"==="+value);
        }

    }
}

在这里插入图片描述

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

键值对

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

键找对涉及到的API:

在这里插入图片描述
例:


import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class MapDemo01 {
    public static void main(String[] args) {
        //1、创建一个对象
        Map<String,Integer> maps=new TreeMap<>();
        maps.put("苹果",3);
        maps.put("梨",5);
        maps.put("橘子",1);
        maps.put("香蕉",10);
        maps.put("菠萝",15);
        System.out.println(maps);
//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);
        }
    }
}

在这里插入图片描述

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

Lambda

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

Lambda涉及到的API:

在这里插入图片描述
例:


import java.util.Map;
import java.util.TreeMap;

public class MapDemo01 {
    public static void main(String[] args) {
        //1、创建一个对象
        Map<String,Integer> maps=new TreeMap<>();
        maps.put("苹果",3);
        maps.put("梨",5);
        maps.put("橘子",1);
        maps.put("香蕉",10);
        maps.put("菠萝",15);
        System.out.println(maps);

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

在这里插入图片描述

7、Map集合的实现类HashMap

HashMap的特点

HashMap是Map里面的一个实现类。特点都是由键决定的:无序、不重复、无索引。
没有额外需要学习的特有方法,直接使用Map里面的方法就可以了。
HashMap跟HashSet底层原理是一模一样的,都是哈希表结构,只是HashMap的每个元素包含两个值而已。
实际上:Set系列集合的底层就是Map实现的,只是Set集合中的元素只要键数据,不要值数据而已。

8、Map集合的实现类LinkedHashMap

LinkedHashMap集合概述和特点

由键决定:有序、不重复、无索引。
这里的有序指的是保证存储和取出的元素顺序一致
原理:底层数据结构是依然哈希表,只是每个键值对元素又额外的多了一个双链表的机制记录存储的顺序。

9、Map集合的实现类TreeMap

TreeMap集合概述和特点

由键决定特性:不重复、无索引、可排序
可排序:按照键数据的大小默认升序(有小到大)排序。只能对键排序。
注意:TreeMap集合是一定要排序的,可以默认排序,也可以将键按照指定的规则进行排序
TreeMap跟TreeSet一样底层原理是一样的。

<think>首先,用户的问题是关于JavaMap集合的使用方法。他们提到“我想了解JavaMap集合的使用方法”,并询问“如何在Java中使用Map集合”。系统级指令要求我使用中文回答,结构清晰,帮助用户逐步解决问题。用户提供了引用:引用[1]和引用[2]。这些是关于Map集合概述和遍历方法的代码示例。我需要参考这些,因为指令说“参考用户上一次的问题和你的回答”,但用户这是第一次询问关于Map的问题,所以我会参考这些引用。关键元素从系统指令:-行内数学表达式用`$...$`。-独立公式用`$$...$$`。-LaTeX语法正确(虽然这里是编程问题,可能不涉及数学公式)。-使用中文回答。-生成相关问题。-回答中引用的段落末尾添加引用标识,如`[^1]`。-回答结构清晰,真实可靠。此外,在示例中,我看到有一个代码块是用```code```格式展示的,比如Python示例。对于Java代码,我应该类似处理。生成相关问题:在回答结束时,我需要添加一个§§相关问题§§部分,列出几个相关问题。步骤结构:1.**引言**:简要介绍Map集合是什么,它在Java中的作用。2.**基本用法**:包括如何创建Map、添加元素、获取元素等。3.**遍历方法**:基于引用的内容,详细解释如何遍历Map。4.**代码示例**:使用Java代码块展示。5.**总结**:关键点总结。6.**相关问题**:生成3-5个相关问题。参考引用:-引用[1]展示了两遍历Map的方式:一种是通过keySet找value,另一种是通过entrySet。-引用[2]解释了entrySet方法的优势。确保使用中文。生成相关问题:如示例所示,§§相关问题§§部分列出问题。计划内容:-**什么是Map集合?**:Map是一种键值对数据结构,允许通过键访问值。-**如何创建和使用Map**:-导入相关包:java.util.Map,java.util.HashMap等。-创建实例:Map<String,String>map=newHashMap<>();-添加元素map.put(key,value);-获取元素map.get(key);-**遍历Map**:-方式1:使用keySet()遍历键,再根据键获取值(如引用[1])。-方式2:使用entrySet()直接遍历键值对(更高效)。-引用中添加`[^1]`和`[^2]`。-**优点和使用场景**:快速查找、存储键值对等。代码块:使用```java...```包裹。相关问题:生成如“Map与List的区别?”“HashMap与TreeMap的比较?”“Map的安全性问题?”等。最终结构:1.开头解释概念。2.描述基本操作。3.展示遍历代码(取自引用)。4.总结。5.§§相关问题§§。</think> ### JavaMap集合的使用方法详解 Map集合Java中一种常用的数据结构,用于存储键值对(key-value pairs),每个键(key)对应一个唯一的值(value)。它实现了高效的键值查找,常用于缓存、数据映射或配置管理等场景。以下我将逐步讲解如何在Java中使用Map集合,确保内容结构清晰、可靠。内容基于Java标准库提供的Map接口和其实现类(如HashMap),并参考了提供的引用内容。 #### 1. **Map集合的基本操作** Map集合的基本使用包括创建、添加元素、获取元素和删除元素。 - **导入必要包**:使用Map前需导入相关类(如`java.util.Map`, `java.util.HashMap`)。 - **创建Map实例**:通过泛型指定键和值的类型,例如: ```java Map<String, String> map = new HashMap<>(); ``` - **添加元素**:使用`put()`方法添加键值对,如果键已存在,则更新值。 ```java map.put("2001", "张三"); // 添加键"2001"对应值"张三" map.put("2002", "李四"); map.put("2003", "王五"); ``` - **获取元素**:使用`get()`方法根据键获取值。 ```java String name = map.get("2001"); // 返回"张三" ``` - **删除元素**:使用`remove()`方法删除指定键的键值对。 ```java map.remove("2002"); // 删除键"2002"及对应的值 ``` - **检查键或值存在**:使用`containsKey()`或`containsValue()`方法。 ```java boolean isKeyPresent = map.containsKey("2001"); // 返回true ``` #### 2. **Map集合的遍历方法** 遍历是Map使用的关键部分,Java提供多种遍历方式。参考引用内容[^1][^2],常见遍历方法包括: - **方式1:通过键集合遍历(keySet方法)** 先获取所有键的集合,再遍历键来获取值。适合需要同时操作键和值的场景,但效率略低于entrySet。 ```java Set<String> keySet = map.keySet(); // 获取键的集合 for (String key : keySet) { String value = map.get(key); // 由键获取值 System.out.println(key + " " + value); // 输出: 2001 张三, 2002 李四 } ``` 这种方式简单易懂,但在大数据量时多次调用`get()`方法可能影响性能[^1]。 - **方式2:通过键值对集合遍历(entrySet方法)** 直接获取键值对的集合(`Map.Entry`对象),通过遍历一次获取键和值。效率更高,推荐用于频繁遍历。 ```java Set<Map.Entry<String, String>> entrySet = map.entrySet(); // 获取键值对的集合 for (Map.Entry<String, String> entry : entrySet) { String key = entry.getKey(); // 获取键 String value = entry.getValue(); // 获取值 System.out.println(key + " " + value); // 输出: 2001 张三, 2002 李四 } ``` entrySet方法避免了多次`get()`调用,提升性能[^2]。 以上方法均适用于Map的实现类(如HashMap、TreeMap)。实际使用时,建议: - 优先使用entrySet遍历,性能更优。 - 使用lambda表达式(Java 8+)可简化遍历代码:`map.forEach((key, value) -> System.out.println(key + " " + value));`。 #### 3. **总结及最佳实践** - **核心特点**:Map允许高效的键值查找(时间复杂度接近$O(1)$)。 - **常用实现类**: - `HashMap`:无序,查找速度快。 - `TreeMap`:有序,基于键排序。 - **适用场景**:配置管理(如键对应值)、数据缓存(如键是ID,值是对象)、数据转换等。 - **注意事项**: - 键必须是唯一的(重复添加会覆盖值)。 - 值可以是null,但键不能为null(某些实现类如HashMap允许,但不推荐)。 - 线程安全需求时,使用`ConcurrentHashMap`或`Collections.synchronizedMap()`。 通过以上步骤,您能熟练掌握Map的创建、操作和遍历,满足大多数开发需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

取个锤子名子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值