Nrich's blog Nrich's blog
首页
  • Java
  • Golang
  • 深度学习
  • Git
  • Linux
  • DataStructure
  • CloudNative
  • Redis
  • MySQL
  • 路由劫持
GitHub (opens new window)

Nrich

小聪明
首页
  • Java
  • Golang
  • 深度学习
  • Git
  • Linux
  • DataStructure
  • CloudNative
  • Redis
  • MySQL
  • 路由劫持
GitHub (opens new window)
  • Java

    • 黑马Java入门基础-学习笔记

      • Java 基础语法
      • 数组
      • 方法
      • 面向对象基础
      • 常用API(String、ArrayList)
      • 面向对象进阶1(static、单例、代码块、继承)
      • 面向对象进阶2(包、权限修饰符、抽象类、接口)
      • 面向对象进阶3(多态、内部类、常用API)
      • 面向对象进阶4(常用日期API、正则、Arrays类、Lambda)
      • 面向对象进阶5(集合体系)
      • 面向对象进阶6(集合体系之Map)
        • 1. Map 集合
          • 1.1 关于 Map 集合自身
          • 1.2 Map 集合体系
          • 1.3 Map 集合的遍历
          • 1.3.1 遍历方式一:键找值
          • 1.3.2 遍历方式二:键值对流程
          • 1.3.3 遍历方式三:Lambda
          • 1.4 Map 集合之实现类
          • 1.4.1 HashMap
      • 面向对象进阶-补充(可变参数)
    • 面向对象
    • 常用API
    • 并发、并行、异步、同步(暂存)
    • 《Spring Boot 进阶-郑天民》

  • GoLang

  • 开发
  • Java
  • 黑马Java入门基础-学习笔记
Nrich
2023-03-30
目录

面向对象进阶6(集合体系之Map)

# 1. Map 集合

# 1.1 关于 Map 集合自身

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

Map 集合的完整格式:

{key1=value1 , key2=value2 , key3=value3 , ...}

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

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

# 1.2 Map 集合体系

$uploadName

使用最多的 Map 集合是 HashMap。

重点掌握 HashMap , LinkedHashMap , TreeMap。其他的后续理解。

Map 集合体系的特点:

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

Map 集合实现类特点:

  • HashMap: 元素按照键是无序,不重复,无索引,值不做要求。(与Map体系一致)
  • LinkedHashMap: 元素按照键是有序,不重复,无索引,值不做要求。
  • TreeMap:元素按照建是排序,不重复,无索引的,值不做要求。

Map 集合常用 API:

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

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

# 1.3 Map 集合的遍历

Map 集合遍历有三种方式:

  • 键找值的方式遍历:先获取Map集合全部的键,再根据遍历键找值。
  • 键值对的方式遍历,把“键值对“看成一个整体,难度较大。
  • JDK 1.8开始之后的新技术:Lambda表达式。

# 1.3.1 遍历方式一:键找值

示例代码:



















 


 






/**
    a.“键找值”的方式遍历Map集合。
        1.先获取Map集合的全部键的Set集合。
        2.遍历键的Set集合,然后通过键找值。
 */
public class MapDemo01 {
    public static void main(String[] args) {
        Map<String , Integer> maps = new HashMap<>();
        // 1.添加元素: 无序,不重复,无索引。
        maps.put("娃娃",30);
        maps.put("iphoneX",100);
        maps.put("huawei",1000);
        maps.put("生活用品",10);
        maps.put("手表",10);
        System.out.println(maps);
        // maps = {huawei=1000, 手表=10, 生活用品=10, iphoneX=100, 娃娃=30}

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

    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 1.3.2 遍历方式二:键值对流程

示例代码:



























 


 
 





/**
    b.“键值对”的方式遍历:
        1.把Map集合转换成一个Set集合:Set<Map.Entry<K, V>> entrySet();
        2.此时键值对元素的类型就确定了,类型是键值对实体类型:Map.Entry<K, V>
        3.接下来就可以用foreach遍历这个Set集合,类型用Map.Entry<K, V>
 */
public class MapDemo02 {
    public static void main(String[] args) {
        Map<String , Integer> maps = new HashMap<>();
        // 1.添加元素: 无序,不重复,无索引。
        maps.put("娃娃",30);
        maps.put("iphoneX",100);
        maps.put("huawei",1000);
        maps.put("生活用品",10);
        maps.put("手表",10);
        System.out.println(maps);
        /**
            maps = {huawei=1000, 手表=10, 生活用品=10, iphoneX=100, 娃娃=30}
                👇
            使用foreach遍历map集合.发现Map集合的键值对元素直接是没有类型的。所以不可以直接foreach遍历集合。
                👇
            可以通过调用Map的方法 entrySet把Map集合转换成Set集合形式  maps.entrySet();
                👇
            此时可以使用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);
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

# 1.3.3 遍历方式三:Lambda

示例代码:
























 
 





/**
    c.JDK 1.8开始之后的新技术:Lambda表达式。(暂时了解)
 */
public class MapDemo03 {
    public static void main(String[] args) {
        Map<String , Integer> maps = new HashMap<>();
        // 1.添加元素: 无序,不重复,无索引。
        maps.put("娃娃",30);
        maps.put("iphoneX",100);//  Map集合后面重复的键对应的元素会覆盖前面重复的整个元素!
        maps.put("huawei",1000);
        maps.put("生活用品",10);
        maps.put("手表",10);
        System.out.println(maps);

        //  maps = {huawei=1000, 手表=10, 生活用品=10, iphoneX=100, 娃娃=30}

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

    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# 1.4 Map 集合之实现类

# 1.4.1 HashMap

HashMap 是 Map 里面的一个实现类。

HashMap 的特点:

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

实际上:Set 系列集合的底层就是 Map 实现的,只是 Set 集合中的元素只要键数据,不要值数据。

源码:

public HashSet() {
    map = new HashMap<>();
}
1
2
3
编辑 (opens new window)
上次更新: 2023/03/30, 09:25:20
面向对象进阶5(集合体系)
面向对象进阶-补充(可变参数)

← 面向对象进阶5(集合体系) 面向对象进阶-补充(可变参数)→

最近更新
01
YAML、Pod、Job、CronJob、ConfigMap、Secret
06-06
02
Kubernetes 的安装与基本架构
06-04
03
初识容器
05-30
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Nrich | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式