第7章-第6节-Java中的Map集合

news2024/11/17 15:52:04

1、HashMap:

1)、 引入

如果业务需要我们去用姓名的拼音手写字母匹配完整姓名,那么如果用单列数据,我们可能需要两个集合才能存储,而且两个集合之间没有关联不好操作,这种时候双列数据就会起很大作用

2)、 单列数据与双列数据

3)、map概述

Map :映射。跟 Collections 体系的集合,是不一样的。是以key-value的形式保存数据的,常常称之为键值对。

4)、 HashMap概念及特点

概述:HashMap实现了Map接口,是Map子类中使用最最最多的。

数据结构:key部分使用的数据结构为:数组+双向链表+红黑树 。HashSet使用的就是key部分进行存储的。

存储数据特点

  • 键值对映射关系

  • 一个键对应一个值

  • 键不能重复,值可以重复

  • 键允许为空值

  • 元素存取无序

5)、 方法的使用

方法名说明
V put(K key,V value)添加元素
V remove(Object key)根据键删除键值对元素
void clear()移除所有的键值对元素
boolean containsKey(Object key)判断集合是否包含指定的键
boolean containsValue(Object value)判断集合是否包含指定的值
boolean isEmpty()判断集合是否为空
int size()集合的长度,也就是集合中键值对的个数
V get(Object key)根据键获取值
Set<K> keySet()获取所有键的集合
Collection<V> values()获取所有值的集合
Set<Map.Entry<K,V>> entrySet()获取所有键值对对象的集合

 6)、增加

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

public class AddDemo {
    public static void main(String[] args) {
        // 定义一个map对象,key存放字符串类型,value存放Integer类型
        Map<String, Integer> map = new HashMap<>();
        map.put("a", 5);
        map.put("c", 2);
        map.put("e", 6);
        map.put(null, 0);
        map.put(null, 2);
        System.out.println(map);

        // 定义一个map,key存放字符串类型,value存放字符串类型
        Map<String, String> map1 = new HashMap<>();
        map1.put("java", "企业级系统开发");
        map1.put("Python", "人工智能");
        map1.put("go", "字节跳动");
        map1.put(null, null);
        // key不存在就添加(key存在,如果value值为null,也会添加)
        map1.putIfAbsent(null, "哈哈");
        System.out.println(map1);

    }
}

7)、删除

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

public class RemoveDemo {
    public static void main(String[] args) {
        // 定义一个map,key存放字符串类型,value存放字符串类型
        Map<String, String> map = new HashMap<>();
        map.put("001", "唐海峰");
        map.put("002", "张三丰");
        map.put("003", "张无忌");
        map.put("004", "东方不败");

        // 根据键值删除,返回被删除的元素
        String content = map.remove("001");
        System.out.println(content);
        System.out.println(map);

        // 根据键值对删除,返回一个Boolean类型的结果
        boolean flag = map.remove("004", "东方不败");
        System.out.println(flag);
        System.out.println(map);

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

    }
}

8)、修改

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

public class UpdateDemo {
    public static void main(String[] args) {
        // 定义一个map,key存放字符串类型,value存放字符串类型
        Map<String, String> map = new HashMap<>();
        map.put("001", "唐海峰");
        map.put("002", "张三丰");
        map.put("003", "张无忌");
        map.put("004", "东方不败");
        System.out.println(map);

        // 修改(存在就修改,不存在就添加)
        String content = map.put("001", "唐延");
        System.out.println(content);
        System.out.println(map);

        // 根据key查找,替换指定key值的内容
        String con = map.replace("006", "唐海峰");
        System.out.println(con);
        System.out.println(map);

        // 根据key,value查找,替换指定的值
        map.replace("001", "唐延", "tarnett");
        System.out.println(map);
    }
}

9)、查询

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

public class SelectDemo {
    public static void main(String[] args) {
        // 定义一个map,key存放字符串类型,value存放字符串类型
        Map<String, String> map = new HashMap<>();
        map.put("001", "唐海峰");
        map.put("002", "张三丰");
        map.put("003", "张无忌");
        map.put("004", "东方不败");
        System.out.println(map);

        // 获取指定key对应的值
        String content = map.get("001");
        System.out.println(content);

        // 获取集合的长度,获取key的长度
        System.out.println(map.size());

        // 查询是否包含指定的key
        System.out.println(map.containsKey("006"));

        // 判断是否为空
        System.out.println(map.isEmpty());

        // 获取所有的key
        Set<String> keySet = map.keySet();
        System.out.println(keySet);

        // 获取所有的值
        Collection<String> values = map.values();
        System.out.println(values);
    }
}

 2、两种遍历:

1)、通过key获取值

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

public class KetSetDemo {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("001", "唐海峰");
        map.put("002", "张三丰");
        map.put("003", "张无忌");
        map.put("004", "东方不败");

        // 获取所有的key
        Set<String> keySet = map.keySet();
        // 遍历keySet,通过key获取value
        for(String key : keySet){
            String value = map.get(key);
            System.out.println(value);
        }
    }
}

2)、获取所有的键值对

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

public class EntryDemo {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("001", "唐海峰");
        map.put("002", "张三丰");
        map.put("003", "张无忌");
        map.put("004", "东方不败");

        // 获取所有的键值对
        Set<Map.Entry<String, String>> entrySet = map.entrySet();
        // 遍历键值对
        for(Map.Entry<String, String> entry : entrySet){
            // 通过键值对对象获取key和value
            System.out.println("key = " + entry.getKey() + " : " + entry.getValue());
        }
    }
}

3)、HashMap保存各种数据类型:

1>、键是String,值为自定义类型

import java.util.HashMap;
import java.util.Set;

/**
 * 键是String,值为自定义类型
 */
public class Test01 {
    public static void main(String[] args) {
        HashMap<String, Student> map = new HashMap<>();
        map.put("001", new Student("zhangsan", 21));
        map.put("002", new Student("lisi", 22));
        map.put("003", new Student("wangwu", 23));
        System.out.println(map);
        
        // 遍历
        Set<String> keySet = map.keySet();
        for(String key : keySet) {
            System.out.println(map.get(key));
        }
    }
}

2>、键是String,值为ArrayList

import java.util.*;

/**
 * 键是String,值为ArrayList
 */
public class Test02 {
    public static void main(String[] args) {
        Map<String, List<String>> map = new HashMap<>();
        List list1 = new ArrayList();
        list1.add("孙悟空");
        list1.add("猪八戒");
        map.put("西游记", list1);

        List list2 = new ArrayList();
        list2.add("赵云");
        list2.add("马超");
        map.put("三国演义", list2);

        // 遍历
        Set<String> keySet = map.keySet();
        for(String key : keySet) {
            List<String> list = map.get(key);
            for (String value : list) {
                System.out.println(value);
            }
        }
    }
}

3>、ArrayList嵌套HashMap

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test03 {
    public static void main(String[] args) {
        List<HashMap<String, String>> list = new ArrayList<>();

        HashMap<String, String> map1 = new HashMap<>();
        map1.put("杨过", "小龙女");
        map1.put("郭靖", "黄蓉");
        list.add(map1);

        HashMap<String, String> map2 = new HashMap<>();
        map2.put("java", "系统开发");
        map2.put("go", "字节跳动");
        list.add(map2);

        System.out.println(list);
    }
}

本电子书目录:《Java基础的重点知识点全集》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1368335.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mysql : command not found

1.Mysql : command not found 安装成功的mysql&#xff0c;并且服务已经启动&#xff0c;查看进行是可以看到的&#xff0c;但是使用命令登录操作&#xff0c;却抛出错误&#xff1a;command not found。 2.解决方案 2.1 查看/usr/bin目录下是否有mysql服务连接 ls /usr/bin…

服务网格 Service Mesh

什么是服务网格&#xff1f; 服务网格是一个软件层&#xff0c;用于处理应用程序中服务之间的所有通信。该层由容器化微服务组成。随着应用程序的扩展和微服务数量的增加&#xff0c;监控服务的性能变得越来越困难。为了管理服务之间的连接&#xff0c;服务网格提供了监控、记…

Linux 期末复习

Linux 期末复习 计算机历史 硬件基础 1&#xff0c;计算机硬件的五大部件&#xff1a;控制器、运算器、存储器、输入输出设备 2&#xff0c;cpu分为精简指令集(RISC)和复杂指令集(CISC) 3&#xff0c;硬件只认识0和1&#xff0c;最小单位是bit&#xff0c;最小存储单位是字…

应用统计学期末复习简答题

应用统计学期末复习简答题 1&#xff0e;解释众数、中位数和调和平均数。2、什么是普查&#xff1f;其有何特点和作用&#xff1f;3、什么是抽样调查&#xff1f;其有何特点和作用&#xff1f;4、什么是偏度系数&#xff0c;并解释左偏分布、对称分布和右偏分布。5、解释置信区…

竞赛保研 基于深度学习的人脸表情识别

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的人脸表情识别 该项目较…

结构型设计模式——适配器模式

适配器模式 这个更加好理解&#xff0c;就是做适配功能的类&#xff0c;例如&#xff0c;现在手机没有了圆形耳机接口&#xff0c;只有Type-C接口&#xff0c;因此你如果还想要使用圆形耳机的话需要买个圆形接口转Type-C的转换器&#xff08;适配器&#xff09;&#xff0c;这…

一分钟带你了解深度学习算法

深度学习是一种受到生物学启发的机器学习方法&#xff0c;其目标是通过构建多层神经网络来模拟人脑的工作原理。它在过去几十年来取得了巨大的进展&#xff0c;并在图像识别、语音识别、自然语言处理等领域取得了突破性的成果。 深度学习的核心思想是模仿人脑的神经网络。人脑中…

HarmonyOS应用开发学习笔记 Want概述Ability跳转

一、Want的定义与用途 Want是对象间信息传递的载体&#xff0c;可以用于应用组件间的信息传递。其使用场景之一是作为startAbility()的参数&#xff0c;包含了指定的启动目标以及启动时需携带的相关数据&#xff0c;如bundleName和abilityName字段分别指明目标Ability所在应用…

vue element ui table表格--实现列的显示与隐藏

前言 实现效果 提示&#xff1a;代码段太简单就不解释了&#xff0c;自己看代码自己更改&#xff0c;下面代码直接无脑复制更改就行 一、实现代码&#xff1f; <template><div id"app"><el-table :data"tableData" border style"w…

Spring 见解 7 基于注解的AOP控制事务

8.基于注解的AOP控制事务 8.1.拷贝上一章代码 8.2.applicationContext.xml <!-- 开启spring对注解事务的支持 --> <tx:annotation-driven transaction-manager"transactionManager"/> 8.3.service Service Transactional(readOnlytrue,propagation Pr…

学生用台灯对眼睛好吗?五款考研党台灯推荐

对于一名深耕家电多年的测评师&#xff0c;对于各品牌的台灯产品测评做了不少&#xff0c;本期我将给大家带来一期超全的热门护眼台灯深度测评。 据世界卫生组织最新研究报告称&#xff0c;我国近视患者人数多达6亿左右&#xff0c;几乎占据了中国总人口数量的一半&#xff0c;…

进程管理及计划任务

一、定义 程序&#xff1a;硬盘上躺着。执行特定任务的一串代码 进程&#xff1a;加载到内存中运行。进程是程序的副本&#xff0c;进程是有生命周期 进程的控制&#xff1a;每开启一个进程会消耗相应的硬件资源&#xff0c;内存&#xff0c;CPU&#xff0c;磁盘io 内存不足&am…

MongoDB高级集群架构设计

两地三中心集群架构设计 容灾级别 RPO & RTO RPO&#xff08;Recovery Point Objective&#xff09;&#xff1a;即数据恢复点目标&#xff0c;主要指的是业务系统所能容忍的数据丢失量。RTO&#xff08;Recovery Time Objective&#xff09;&#xff1a;即恢复时间目标&…

余震强度预测能力升级,Nature 刊文认证基于神经网络的模型性能优于传统模型

作者&#xff1a;李宝珠 编辑&#xff1a;李玮栋、xixi&#xff0c;三羊 地震的发生涉及诸多变量&#xff0c;「预测」存在挑战&#xff0c;但余震发生次数及强度的预测已取得重大进展。 2023 年 12 月 18 日 23 时 59 分&#xff0c;甘肃省临夏州积石山县发生 6.2 级地震&…

DQL-条件查询

1.语法 SELECT 字段列表 FROM 表名 WHERE 条件列表; 2.条件

RDD算子——Action 操作

reduce reduce 和 reduceByKey 有什么区别&#xff1a; reduce 是一个 Action 算子&#xff0c;reduceByKey 是一个转换算子 假设一个 RDD 里面有一万条数据&#xff0c;大部分 Key 是相同的&#xff0c;有十个不同的 Key。 rdd.reduceByKey 生成 10 条数据 而rdd.reduce 生成…

VScode/Xshell连接学校服务器

vscode连学校服务器 1.连接atrust VPN2.Xshell连接服务器2.1创建一个自己的用户 3.xftp传文件4.vscode连接服务器4.1下载remote-ssh4.2连接服务器4.3激活conda环境4.4运行代码 5. pytorch版本不兼容解决方案 1.连接atrust VPN 如果是使用的是校园网&#xff0c;可以不连接 2…

已删除数据恢复,4个简单有效方法分享!

“我前段时间不小心将电脑里重要的几个文件删除了&#xff0c;今天查找这些文件时才发现我的数据都没有了&#xff0c;这可怎么办呢&#xff1f;还有恢复的机会吗&#xff1f;” 很多用户在使用电脑时&#xff0c;会选择直接将重要的文件保存在电脑上&#xff0c;这就不可避免在…

Android 架构 - 模块化

参考文章 谷歌官方指南 一、概念 将大型、复杂问题拆解成一个个小的、简单问题&#xff0c;从而可以做到各个击破。模块化简单讲就是把多功能高耦合的代码逻辑拆散成多个功能单一职责明确的模块。模块指 Android 项目中的 module&#xff0c;通常会包含 Gradle 构建脚本、源代…

TS 36.213 V12.0.0-PDSCH相关过程(1)-收到PDSCH的UE过程

本文的内容主要涉及TS 36.213&#xff0c;版本是C00&#xff0c;也就是V12.0.0。