JavaSE22-集合2-map

news2024/11/25 10:10:02

文章目录

  • 一、集合概念
  • 二、map集合
    • 1、Map集合的特点
    • 2、HashMap
      • 2.1 HashMap特点
      • 2.2 创建对象
      • 2.3 常用方法
      • 2.4 遍历
        • 2.4.1 使用entrySet遍历
        • 2.4.2 使用keySet遍历
    • 3、HashMap的key去重原理

一、集合概念

  1. 集合就是用于存储多个数据的容器。相对于具有相同功能的数组来说,集合的长度可变会更加灵活方便。
  2. 集合主要有两个顶层接口,Collection和Map。
    在这里插入图片描述

二、map集合

1、Map集合的特点

Map接口是双列集合的顶层接口,下面是Map接口的定义

interface Map<K,V>  K:键的类型;V:值的类型
  1. 存储的数据必须包含key和value。
  2. key和value在Map集合中是一一对应的关系。一个key对应一个value。
  3. key在map集合中是不会重复的。

2、HashMap

2.1 HashMap特点

  1. 底层数据结构是哈希表
  2. 存储元素的顺序和遍历获取出来的顺序可能不一致
  3. key不会重复

2.2 创建对象

HashMap<key的数据类型,value的数据类型> map = new HashMap<>();

    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<>();
        HashMap<String,Integer> map = new HashMap<>();
    }

2.3 常用方法

  1. V put(K key, V value) //添加元素,如果key不存在就添加,如果key已经存在则是修改对应的value,并且返回修改前的value
  2. V get(Object key) //根据key获取对应的value值返回。如果key不存在就返回null
  3. V remove(Object key) //根据key删除map中对应的键值对。并且把删除的value返回
  4. boolean containsKey(Object key) //判断key是否存在
  5. int size() //集合中键值对的对数
  6. void clear() //清空集合中的所有键值对
  public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<>();
        //map.put()
        //添加元素
        map.put("name", "三更");
        map.put("age", "15");
        String v = map.put("name", "三更草堂");
        String name = map.get("name");
        String age = map.get("age");
        //删除元素
        String delV = map.remove("age");
        //判断key是否存在
        if(map.containsKey("name")){
            String age111 = map.get("name");//null
            System.out.println(age111.length());
        }
        //size
        int size = map.size();
        map.clear();
    }

2.4 遍历

2.4.1 使用entrySet遍历

map集合的entrySet方法可以获取一个Set集合,集合中存放的是Entry对象,一个Entry对象相当于一个键值对。我们可以遍历set集合拿到Entry对象,然后获取出里面的键和值。

    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<>();
        map.put("name","三更");
        map.put("age","15");

        Set<Map.Entry<String, String>> entries = map.entrySet();
        //使用迭代器遍历entrySet
        Iterator<Map.Entry<String, String>> it = entries.iterator();
        while (it.hasNext()){
            Map.Entry<String, String> entry = it.next();
            System.out.println(entry.getKey()+"===="+entry.getValue());
        }
    }
    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<>();
        map.put("name","三更");
        map.put("age","15");
        
        Set<Map.Entry<String, String>> entries = map.entrySet();
        //使用foreach遍历entrySet
        for (Map.Entry<String, String> entry : entries) {
            System.out.println(entry.getKey()+"===="+entry.getValue());
        }
    }

2.4.2 使用keySet遍历

map集合的keySet方法可以获取一个Set集合,集合中存放的是所有的key。我们可以遍历set集合拿到key对象,然后通过key获取对应的value。

    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap<>();
        map.put("name","三更");
        map.put("age","15");

        Set<String> keys = map.keySet();
        for (String key : keys) {
            System.out.println(key+"===="+map.get(key));
        }
    }

3、HashMap的key去重原理

  1. HashMap在添加元素的时候会判断集合中是否有key和本次存入的key相同。判断的时候主要是通过hashCode方法和equals方法来进行判断的。hashCode相同,并且equals判断也相同就会认为是同一个key。
  2. Alt + insert 重写hashCode方法和equals方法
    在这里插入图片描述

注意:HashSet存储数据其实也是使用了HashMap。所以如果往HashSet中存储自定义对象也要看情况是否需要重写hashCode方法和equals方法。

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

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

相关文章

神垕古镇景区三方背后的博弈,争夺许昌第一家5A景区主导权

钧 瓷 内 参 第37期&#xff08;总第368期&#xff09; 2023年3月2日 神垕古镇景区景域&#xff0c;建业&#xff0c;孔家三方背后的博弈&#xff0c;争夺许昌第一家5A景区主导权 在博弈论&#xff08;Game Theory&#xff09;经济学中&#xff0c;“智猪博弈”是一个著名的…

Delphi 中 FireDAC 数据库连接(脱线连接 )

参见&#xff1a;Delphi 中 FireDAC 数据库连接&#xff08;总览&#xff09;述了如何使用FireDAC离线模式&#xff0c;它允许你在没有与数据库持久连接的情况下处理数据。一、概述FireDAC的离线模式类似于多层客户端&#xff0c;大部分时间客户端与数据库断开连接。只有当客户…

给深度学习研究生的入门建议(未完待续ing)

诸神缄默不语-个人CSDN博文目录 本文将系统性介绍深度学习方向&#xff08;准&#xff09;研究生可供参考的入门建议。 我的背景是浙江大学人工智能专业在读硕士&#xff0c;研究方向是GNN、NLP、司法智能。 &#xff08;我的CSDN博文基本涵盖了我所有的深度学习知识&#xff…

pytorch-多层感知机,最简单的深度学习模型,将非线性激活函数引入到模型中。

多层感知机&#xff0c;线性回归和softmax回归在内的单层神经网络。然而深度学习主要关注多层模型。在本节中&#xff0c;我们将以多层感知机&#xff08;multilayer perceptron&#xff0c;MLP&#xff09;为例&#xff0c;介绍多层神经网络的概念。 隐藏层 多层感知机在单层…

Vue环境的搭建和在vscode上的应用(Window10)

Vue环境的搭建 1.安装&#xff1a; 从官网下载安装包&#xff0c;解压到指定位置&#xff0c;就相当于安装完成了。 2.配置环境变量 找到node.js的文件夹&#xff0c;在里面找到src&#xff0c;把路径复制一下。 我在E盘建立了一个文件夹放node&#xff0c;如图找到bin的路径&…

vuecli3打包项目上线之后报错怎么使用本地的sourcemap文件定位调试?

问题 我们上线的时候一般都不会添加sourcemap文件&#xff0c;一方面为了加快构建速度&#xff0c;另一方面避免源码泄漏。所以有时出现报错的时候很难定位问题所在。 例子&#xff1a;比如我写了一个错误的代码&#xff0c;点击 <template><div class"hello&…

QT(58)-VS2010+QT4+QWT5+win32是适配的-其余版本基本不通。

正解&#xff1a; VS2010QT4QWT5win32是适配的。 其余的配置基本不通。 当我用VS2019底下的命令行编译QT库时&#xff1a; 1.编译QWT库。VS2019 QWT5源码 1.选择编译器&#xff1a;4种参数 2.到源码目录下 生成makefile 文件。 3.修改makefile 文件用于指定QT4还是QT5去编译&a…

自己动手打造一款React路由守卫

引言 用过vue的小伙伴都知道&#xff0c;vue自带路由守卫钩子并且巨他妈的好用&#xff0c;而对于react开发者来说&#xff0c;在需要路由权限校验时常常存在许多痛点问题。今天我将为大家打造一款属于我们reacter的路由守卫方法&#xff0c;希望可以为大家提供帮助。 react路…

JVM

HotSpot虚拟机结构概览 JVM是运行在操作系统之上的&#xff0c;并没有和硬件有直接的交互&#xff1b;正所谓Java代码一次编译,到处运行 方法区和堆区是所有线程共享的内存区域&#xff1b; 而java栈、本地方法栈和程序计数器是运行是线程私有的内存区域。Java栈又叫做jvm虚拟…

c语言指针怎么理解 第二部分

第四&#xff0c;指针有啥用。 比方说&#xff0c;我们有个函数&#xff0c;如下&#xff1a; int add&#xff08;int x){ return (x1); //把输入的值加1并返回结果。 } 好了&#xff0c;应用的时候是这样的&#xff1a; { int a1; aadd(a); //add函数返回的是a1 //现在 a等于…

在苹果电脑 mac 上安装原神(playCover)

该方法只能在 M1、M2 mac 上安装原神 目录前言一、首先下载安装 playCover1. playCover 下载2. playCover 安装安装出现问题解决方法二、下载安装原神1.安装包下载2.安装原神三、登录、键盘映射及版本更新等问题登录键盘映射版本更新前言 最近买了新的mac&#xff0c;作者本人…

Python自动化测试之request库【参数关联】(五)

目录&#xff1a;导读 参数关联 1、找到一个接口发送请求 2、分析返回&#xff0c;提取下一个接口需要用到请求 3、请求下一个接口&#xff0c;上一个接口的返回当作请求参数 正则表达式提取数据 1、请求接口&#xff0c;查看返回内容 2、通过正则表达式取数据 3、上一…

借助阿里云 AHPA,苏打智能轻松实现降本增效

作者&#xff1a;元毅 “高猛科技已在几个主要服务 ACK 集群上启用了 AHPA。相比于 HPA 的方案&#xff0c;AHPA 的主动预测模式额外降低了 12% 的资源成本。同时 AHPA 能够提前资源预热、自动容量规划&#xff0c;能够很好的应对突发流量。” ——赵劲松 (高猛科技高级后台工…

【C#篇】关于Thread.Sleep(1),实际耗时15.6212ms的问题

问题描述&#xff1a;睡眠线程耗时测试&#xff1a;DateTime startTime DateTime.Now;Thread.Sleep(1);DateTime endTime DateTime.Now;TimeSpan tp endTime - startTime;txtMsg.AppendText("睡眠线程耗时测试&#xff1a;" &#xff08;tp.TotalMilliSeconds-1&a…

Android jetpack Compose使用及性能优化小结

大概在两年前在星河集团的左邻右家项目中&#xff0c;我就接触到了jetpack Compose&#xff0c;并且还项目中在逻辑简单的页面&#xff0c;使用了compose去实现。当时觉得很新颖&#xff0c;实践中也感觉到&#xff0c;这种响应式的&#xff0c;与当时的Vue/微信小程序/Flutter…

JDK动态代理详解

1.什么是动态代理 可能很多小伙伴首次接触动态代理这个名词的时候&#xff0c;或者是在面试过程中被问到动态代理的时候&#xff0c;不能很好的描述出来&#xff0c;动态代理到底是个什么高大上的技术。不方&#xff0c;其实动态代理的使用非常广泛&#xff0c;例如我们平常使用…

考研复试——计算机网络

文章目录计算机网络1. 说下计算机网络体系结构2. 说一下每层协议有哪些&#xff1f;3. 数据在各层之间是如何传输的呢&#xff1f;4. [从浏览器地址栏输入 url 到显示主页的过程&#xff1f;](https://blog.csdn.net/weixin_46351593/article/details/115386029)5. 说说 HTTP 常…

Guitar Pro8中文版打谱编曲软件

许多打谱编曲软件中都有吉他乐器的插件&#xff0c;插入音轨即可使用&#xff0c;除此以外&#xff0c;还有一款专门针对吉他的音乐软件&#xff0c;就是Guitar Pro。Guitar Pro是吉他类音乐软件中比较有代表性的&#xff0c;从开发至今不断更新优化&#xff0c;目前的软件版本…

如何远程访问公司的电脑?

是否可以从其他地方远程访问公司的电脑&#xff1f;答案是肯定的。一个可靠的远程桌面工具可以让您从另一台设备远程访问您的工作电脑&#xff0c;无论位置如何&#xff0c;无论您是在咖啡厅、酒店还是家中&#xff0c;您都可以从另一台电脑或移动设备远程访问您工作的电脑以处…

【算法基础】深度优先搜索(DFS) 广度优先搜索(BFS)

一、DFS & BFS 1. 深度优先搜索DFS 深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。 2. 广度优先搜索BFS 广度优先搜索较之深度优先搜索之不同在于,深度…