Java--Map接口详解

news2024/9/22 19:40:21

目录

Map接口的特点

代码实现

代码实现

 Map的常用方法

代码实现

Map接口的4种遍历方法

代码实现

第一种方式

第二种方式

第三种方式

第四种方式

Map接口的特点

1)Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value
2)Map中的key和value可以是任何引用类型的数据,会封装到HashMap$Node对象中
3)Map中的key不允许重复,原因和HashSet一样
4)Map中的value可以重复
5)Map的key可以为nul,value也可以为null,注意key为null,只能有一个,value为null,可以多个.
6)常用String类作为Map的key
7)key和value之间存在单向一对一关系,即通过指定的key总能找到对应的value

代码实现

@SuppressWarnings({"all"})
public class Map_ {
    public static void main(String[] args) {
        //map 接口实现类的特点,使用实现类HashMap
        //1.1)Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value(双列元素)
        //2.Map中的key和value可以是任何引用类型的数据,会封装到HashMap$Node对象中
        //3.Map中的key不允许重复,原因和HashSet一样
        //4.Map中的value可以重复
        //5.Map的key可以为nul,value也可以为null,注意key为null,只能有一个,value为null,可以多个.
        //6.常用String类作为Map的key
        //7.key和value之间存在单向一对一关系,即通过指定的key总能找到对应的value
        Map map = new HashMap<>();
        map.put("no-1","浅辄");//k-v
        map.put("no-2","余缶");//k-v
        map.put("no-1","Lee");//当有相同的k,就等价于替换
        map.put("no-3","浅辄");
        map.put(null,null);
        map.put("no-4",null);
        System.out.println("mao="+map);
        //通过get方法,传入key,会返回对应的value
        System.out.println(map.get("no-1"));
    }
}

8)Map存放数据的key-value示意图,一对k-v是放在一个Node中的,有因为Node实现了Entry接口,有些书上也说一对k-v就是一个Entry(如图)[代码演示]

代码实现

@SuppressWarnings({"all"})
public class MapSource_ {
    public static void main(String[] args) {
        Map map = new HashMap<>();
        map.put("no-1","浅辄");//k-v
        map.put("no-2","余缶");//k-v
        //1.k-v最后是HashMap$Node = newNode(hash,key,value,null)
        //2.k-v为了方便程序员的遍历,还会创建EntrySet集合,该集合存放的元素的类型Entry,
        // 而一个Entry对象就有k,v EntrySet<Entry<K,V>>即: transient Set<Map.Entry<K,V>> entrySet;
        //3.entrySet中,定义的类型是Map.Entry,但是实际上存放的还是HashMap$Node
        // 这是因为 HashMap$Node implements Map.Entry
        //4.当把HashMap$Node对象存放到entrySet就方便我们的遍历,因为 Map.Entry 提供了重要的方法
        // K getKey();V getValue();
        Set set = map.entrySet();
        System.out.println(set.getClass());//HashMap$EntrySet
        for (Object obj : set) {
            //System.out.println(entry.getClass());//HashMap$Node
            //为了从HashMap$Node 取出 k-v
            //1.先做一个向下转型
            Map.Entry entry = (Map.Entry)obj;
            System.out.println(entry.getKey()+"-"+entry.getValue());
        }
    }
}

 Map的常用方法

1)put:添加
2)remove:根据键删除映射关系
3)get:根据键获取值
4)size获取元素个数
5)isEmpty:判断个数是否为0
6)clear:清除
7)containsKey:查找键是否存在

代码实现

@SuppressWarnings({"all"})
public class MapMethod {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("小黑子1号",new Book("",100));
        map.put("小黑子1号","鸡你太美");//替换
        map.put("小黑子2号","香精煎鱼食不食");
        map.put("小黑子3号","我测你们码");
        map.put("理塘丁真","我测你们码");
        map.put("小黑子4号",null);
        map.put(null,"我家哥哥下蛋你别吃");
        System.out.println("map="+map);
        //2)remove:根据键删除映射关系
        map.remove(null);
        System.out.println("map="+map);
        //3)get:根据键获取值
        Object val = map.get("理塘丁真");
        System.out.println("val="+val);
        //4)size获取元素个数
        System.out.println("k-y"+map.size());
        //5)isEmpty:判断个数是否为0
        System.out.println(map.isEmpty());
        //6)clear:清除
        map.clear();
        System.out.println("map="+map);
        //7)containsKey:查找键是否存在
        System.out.println(map.containsKey("王源"));
    }
}
class Book{
    private String name;
    private int num;

    public Book(String name, int num) {
        this.name = name;
        this.num = num;
    }
}

Map接口的4种遍历方法

1)containsKey:查找键是否存在
2)keySet:获取所有的键
3)entrySet:获取所有关系k-v
4)values:获取所有的值

代码实现

        Map map = new HashMap();
        map.put("小黑子1号",new Book("",100));
        map.put("小黑子1号","鸡你太美");//替换
        map.put("小黑子2号","香精煎鱼食不食");
        map.put("小黑子3号","我测你们码");
        map.put("理塘丁真","我测你们码");
        map.put("小黑子4号",null);
        map.put(null,"我家哥哥下蛋你别吃");

第一种方式

        //第一组:先取出所有的Key,通过Key 取出对应的value
        Set keySet = map.keySet();
        //(1)增强for
        System.out.println("------第一种方式------");
        for(Object key: keySet){
            System.out.println(key+"-"+map.get(key));
        }
        //(2) 迭代器
        System.out.println("------第二种方式------");
        Iterator iterator = keySet.iterator();
        while(iterator.hasNext()){
            Object key = iterator.next();
            System.out.println(key+"-"+map.get(key));
        }

第二种方式

//第二组:把所有values取出
        Collection values = map.values();
        //这里可以使用所有的Collections使用的遍历方法
        //(1)增强for
        System.out.println("------取出所有value------");
        for (Object value :values) {
            System.out.println(value);
        }
        //(2)迭代器
        System.out.println("------取出所有value------");
        Iterator iterator1 = values.iterator();
        while (iterator.hasNext()){
            Object value = iterator1.next();
            System.out.println(value);
        }

第三种方式

        //第三组:通过EntrySet 来获取key value
        Set entrySet = map.entrySet();
        //(1)增强for
        System.out.println("------使用EnteySet 的 for增强------");
        for (Object entry: entrySet){
            //将entry 转成Map.Entry
            Map.Entry m = (Map.Entry) entry;
            System.out.println(m.getKey()+"-"+m.getValue());
        }

第四种方式

        //(2)迭代器
        System.out.println("------使用EnteySet 的 迭代器------");
        Iterator iterator2 = entrySet.iterator();
        while (iterator2.hasNext()) {
            Object entry = iterator.next();
            //向下转型 Map.Entry
            Map.Entry m = (Map.Entry) entry;
            System.out.println(m.getKey()+"-"+m.getValue());
        }

写在最后:如果觉得小生写的不错,请点击一个关注,你们的点赞和关注就是我最大的动力

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

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

相关文章

如何在星巴克连接家中Windows台式机?(安卓,iOS, Windows, macOS配合frp穿透公网IP实现)

zhaoolee 最近热衷于和海外热心老哥们交换硬盘中的单机游戏资源&#xff08;BT下载&#xff09;&#xff0c;家中有Windows台式机&#xff0c; 适合长时间挂机下载BT资源&#xff0c;zhaoolee希望能随时连接到Windows台式机新增下载任务&#xff0c;安装体积超大的主机游戏。 …

End-to-End Object Detection with Transformers论文阅读笔记

End-to-End Object Detection with Transformers 端到端&#xff0c;不需要NMS后处理了&#xff0c;直接出结果。 1、Abstract 将目标检测作为一个集合预测问题来解决。简化了检测的整体流程&#xff0c;有效的消除了许多人工设计的部分&#xff0c;比如NMS&#xff0c;anch…

数据库连接池(C++11实现)

目的&#xff1a; 因为对数据库的操作实质上是对磁盘的IO操作&#xff0c;所以如果对数据库访问次数过多&#xff0c;就会到导致大量的磁盘IO&#xff0c;为了提高MySQL数据库&#xff08;基于C/S设计&#xff09;的访问瓶颈&#xff0c;除了在服务器端增加缓存服务器缓存常用的…

还在用BERT做文本分类?分享一套基于预训练模型ERNIR3.0的文本多分类全流程实例【文本分类】

目录&#x1f340;一、前言&#x1f331;二、多分类场景简介&#x1f343;三、前期准备阶段&#x1f7e5;3.1 运行环境准备&#x1f7e7;3.2 文心ERNIE系列模型介绍&#x1f7e8;3.3 预训练模型加载⬜3.4 加载项目代码&#x1f490;四、数据准备阶段&#x1f7e9;4.1 数据处理流…

变不可能为可能——记房产推销员佟鑫海

有勤奋&#xff0c;就会有所收获。傲人的成绩和背后的努力密切相关。俗话说得好&#xff0c;没卖不掉的房子&#xff0c;仅有卖不掉房子的艺人经纪人。关键是你是否有恒心。 在明升&#xff0c;总会有这样一群影子&#xff0c;他们每天精力旺盛&#xff0c;衣着光鲜&#xff0…

【C/C++ SOCKET编程】基于TCP协议实现服务器客户端的简单通信

什么是SOCKET Socket又称"套接字"&#xff0c;应用程序通常通过"套接字"向网络发出请求或者应答网络请求&#xff0c;使主机间或者一台计算机上的进程间可以通讯。 TCP/IP协议 从字面意义上讲&#xff0c;有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议…

unsafe.Pointer和uintptr的区别

unsafe 包 func Alignof(x ArbitraryType) uintptr func Offsetof(x ArbitraryType) uintptr func Sizeof(x ArbitraryType) uintptr type ArbitraryType int type Pointer *ArbitraryType在unsafe包中&#xff0c;只提供了3个函数&#xff0c;两个类型。就这么少的量&#xf…

【数据结构进阶】布隆(Bloom Filter)过滤器【哈希+位图的整合】

布隆(Bloom Filter)过滤器【哈希位图的整合】 1、什么是布隆过滤器&#xff1f; 布隆过滤器&#xff08;Bloom Filter&#xff09;是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空…

物联网与射频识别技术,课程实验(四)

实验4—— 基于帧的时隙ALOHA(FSA)算法的实现与性能分析 实验说明&#xff1a; 利用Python或Matlab模拟基于帧的时隙ALOHA算法&#xff1b; 分析标签数量k、帧中所含时隙个数n对信道利用率的影响&#xff0c;其中&#xff0c; 信道利用率发送数据的时间/(发送数据的时间信道空…

【JavaEE】线程的状态转换

新年快乐! 祝新的一年万事胜意! 魅力无限! 随心所欲! 蒸蒸日上! 文章目录1. 线程的基本状态2.Java中线程的状态3. 线程的转换1. 线程的基本状态 操作系统中线程有三个基本状态,就绪状态,运行状态,阻塞状态. 就绪状态, 已经获得除CPU之外的所有资源,只要得到CPU,可立即执行. …

(二十五)大白话数据库无法连接故障的定位,Too many connections

文章目录 1、你是否遇到过Too many connections?2、linux的文件句柄数量被限制1、你是否遇到过Too many connections? 今天要给大家分析另外一个真实的大家都经常会碰到的数据库生产故障,就是数据库无法连接的问题。 大家会看到的异常信息往往是“ERROR 1040(HY000): Too …

ubuntu18.04下mysql数据库安装和C语言连接操作

数据库在应用系统开发中很常见&#xff0c;在众多的数据库中&#xff0c;mysql总是会占有一席之地。本篇说明一下如何在ubuntu18.04上安装mysql数据库。 目录 1.更新环境 2.安装mysql数据库系统 3.检测是否安装成功 4.启动、重启、关闭&#xff0c;删除 5.给root用户设置…

vue3+Ts使用vuex模块化和非模块化管理的2种方式(非pinia)

官网写的很清楚&#xff1a;https://vuex.vuejs.org/zh/guide/typescript-support.html 2种方式 (都不是使用pinia的) 1&#xff1a;复杂版本(不定义自己的 useStore 组合式函数) 使用的时候需要在vuex引入 useStore 在store文件引入导出的key import { useStore } from ‘vu…

CSS3新增的has伪类选择器,让你能轻松选择父元素

文章目录一、语法二、链式操作三、兼容性问题CSS现在新增了一个允许我们选择父元素的伪类&#xff1a;has选择器。可以将其当做父级选择器。 一、语法 选择器1:has(选择器2){} /* 表示选择包含有选择器2的所有的选择器1 比如&#xff1a;*/ div:has(p) {background: black; }…

计算机网络期末考试重点归纳

第 1 章 概述 1. 网络的基本特点 连通性共享性 2. internet 和 Internet 的含义 internetInternet中文名称互连网互联网/因特网名词性质通用名词专用名词名词解释指由多个计算机网络互连而成的计算机网络指当前全球最大的、开放的、由众多网络连接而成的特定互连网&#xff…

电子学会2020年6月青少年软件编程(图形化)等级考试试卷(一级)答案解析

目录 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 二、判断题&#xff08;共10题&#xff0c;每题2分&#xff0c;共20分&#xff09; 三、编程题&#xff08;共3题&#xff0c;每题10分&#xff0c;共30分&#xff09; 青少年软件编程…

Ubuntu22.04下安装MongoDB(6.0版本)并进行相关数据库操作

前言 昨天用ubuntu22.04安装redis-5.0.5服务&#xff0c;因为版本不兼容&#xff0c;导致问题频发&#xff0c;最终在老师帮助下解决了&#xff0c;这又一次提醒了版本兼容的重要性 MongoDB安装与部署 因为所用ubuntu版本为22.04&#xff0c;所以不能按照老师所给文档进行安…

图书管理系统(Java实现简易版)

目录前言预期效果分析1. book包1.1 Book类1.2 BookList 类2. user包2.1 User类2.2 AdminUser类2.3 NormalUser类3. opera包3.1 IOPeration 接口3.2 AddOperation 类3.3 BrrowOperation 类3.4 DelOperation 类3.5 ExitOperation 类3.6 FindOperation 类3.7 ReturnOperation 类3.…

wikijs-一款wiki系统

2022&#xff0c;别了。 1、介绍 wikijs是一款知识共享wiki&#xff0c;优点是有权限管理系统、支持多人协作共同维护、支持markdown格式、支持评论、风格简洁等等。适合作为个人博客&#xff0c;或者小团队的文档知识库。 效果图&#xff1a; 2、部署流程 2.1、安装dock…

前端 | 装饰你的github profile(github 首页)

1.创建存储库 您可以创建一个与您的 github 帐户名同名的存储库 添加README文件 2.编辑README.md 现在&#xff0c;可以根据自己的喜好修改 repo 中的自述文件&#xff0c;但我在考虑包含哪些信息时查看了其他开发人员的资料。通常包括简短的介绍、使用的技术堆栈和联系方式…