[JAVA数据结构]HashMap

news2024/10/7 18:22:58

目录

1.HashMap

1.1Map的常用方法

1.2HashMap的使用案例


1.HashMap

基于哈希表的实现的Map接口。

Map底层结构HashMap
底层结构哈希桶
插入/删除/查找时间复杂度O(1)
是否有序无序
线程安全不安全
插入/删除/查找区别通过哈希函数计算哈希地址
比较与覆写自定义类型需要覆写equals和
hashCode方法

1.1Map的常用方法

方法解释
V get(Object key)返回 key 对应的 value
V getOrDefault(Object key, V defaultValue)返回 key 对应的 value,key 不存在,返回默认值
V put(K key, V value)设置 key 对应的 value
V remove(Object key)删除 key 对应的映射关系
Set<K> keySet()返回所有 key 的不重复集合
Collection<V> values()返回所有 value 的可重复集合
Set<Map.Entry<K, V>> entrySet()返回所有的 key-value 映射关系
boolean containsKey(Object key)判断是否包含 key
boolean containsValue(Object value)判断是否包含 value

注意:Map.Entry<>是Map内部实现的用来存放key-value相应键值对的内部类 

        其内部有getKey(),getValue与setValue()方法

1.2HashMap的使用案例

创建一个HashMap,及put的使用

import java.util.*;

public class Test {
    public static void Map(){
        Map<String,Integer> map = new HashMap<>();
        //创建一个HashMap key的类型为"String" value的类型为"Integer"

        map.put("a",1);
        map.put("b",2);
        map.put("c",3);
        map.put("d",100);
        map.put(null,null);
        map.put("d",4);//当key存在时,则会更新value
        //向map中put入五个键值对
        //注意噢,在HashMap中的key和value都可以为null

        int size = map.size();
        System.out.println("size = " + size);
        //通过size()方法,得到map中键值对的数量.此时size == 5

        int retGet = map.get("a");
        System.out.println("retGet = " + retGet);
        //通过get()方法,得到对应key的value值.此时retGet为1
        //retGet = map.get("z");//map中的key没有"z",此条程序会报错
        //注意!!! 当使用get方法时,map中没有对应的key值时,程序会报错

        int retGOD = map.getOrDefault("z",-1);
        System.out.println("retGOD = " + retGOD);
        //此处retGOD为-1
        //通过getOrDefault()方法,得到对应的key的value值,如果key值不存在
        //则返回我们设置的默认值"-1".
        //与get()不同的是,查找的key如果不存在于map中,也不会进行报错

        boolean retConK = map.containsKey("a");
        boolean retConV = map.containsValue(4);
        System.out.println("retConk = " + retConK);
        System.out.println("retConV = " + retConV);
        //通过containsKey()方法查找map中是否存在对应的key值
        //containsValue()方法查找map中是否存在对应的value,可以是一个或多个

        Set<String> set = map.keySet();
        for (String s:set) {
            System.out.print(s + " ");
        }
        System.out.println();
        //通过keySet()方法,返回map中所有的key值,并以set的形式返回

        int retRemove = map.remove("a");
        System.out.println("retRemover = " + retRemove);
        //通过remove()方法,根据key值删除相应的键值对,并返回删除的value值

        int retReplace = map.replace("b",10);
        System.out.println("retReplace = " + retReplace);
        //通过replace()方法,更新key的value--好像直接put也一样?

        Collection<Integer> collection = map.values();
//        for (int i:collection) {         此方法因为value中有一个null,直接遍历会有一个空指针的报错,int类型也不能与null比较
//            System.out.println(i + " "); 于是乎,有了以下使用迭代器的方式来遍历
//        }
//        System.out.println();
        Iterator<Integer> iterator = collection.iterator();
        while (iterator.hasNext()){
            System.out.print(iterator.next() + " ");
        }
        System.out.println();
        //通过keySet()方法,返回map中所有的value值,以collection的形式返回

        Set<Map.Entry<String,Integer>> entrySet = map.entrySet();
        for (Map.Entry<String, Integer> s : map.entrySet()) {
            System.out.print(s.getKey() + "->" + s.getValue() + " ");
        }
        System.out.println();
        //通过entrySet()方法,得到key与value的对应关系,并使用其getKey与getValue得到相应的值

    }
    public static void main(String[] args) {
        Map();
    }
}

 

 

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

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

相关文章

leetcode.1504. 统计全 1 子矩形(单调栈-java)

统计全 1 子矩形 leetcode.1504. 统计全 1 子矩形题目描述单调栈解题代码演示 单调栈专题 leetcode.1504. 统计全 1 子矩形 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/count-submatrices-with-all-ones 题目描述 给…

pytest之配置文件pytest.ini

前言&#xff1a; pytest.ini文件是pytest的主配置文件&#xff0c;可以改变pytest的运行方式&#xff0c;它是一个固定的文件pytest.ini文件&#xff0c;读取配置信息&#xff0c;按指定的方式去运行。 pytest.ini文件的位置一般放在项目的根目录下&#xff0c;不能随便放&a…

Vant入门介绍

Vant 介绍 Vant是有赞开源的一套基于Vue2.0的Mobile组件库。Vant 是一套轻量、可靠的移动端组件库。通过 Vant&#xff0c;可以搭建出风格统一的&#xff0c;提升开发效率。通过Vant,可以搭建出风格统一的,提升开发效率。目前已有近50个组件,这些组件被广泛使用于有赞的各个移…

LVS-DR排错思路

一.LVS-DR实验排错思路 1.案例架构图 DR服务器&#xff1a;192.168.27.11 web服务器1&#xff1a;192.168.27.12 web服务器2&#xff1a;192.168.27.13 vip&#xff1a;192.168.27.180 客户端&#xff1a;192.168.27.2 1&#xff1a;配置负载调度器&#xff1a;&#xff…

【集群】脑裂是什么?Zookeeper是如何解决的?

文章目录 什么是脑裂Zookeeper集群中的脑裂场景过半机制 什么是脑裂 脑裂(split-brain)就是“大脑分裂”&#xff0c;也就是本来一个“大脑”被拆分了两个或多个“大脑”&#xff0c;我们都知道&#xff0c;如果一个人有多个大脑&#xff0c;并且相互独立的话&#xff0c;那么…

[HDCTF2019]MFC

前言 mfc逆向&#xff0c;有一个VM壳一看到它就头疼&#xff0c;好在这道题用不到&#xff0c;可以直接通过xspy获取mfc自定义消息 分析 工具下载&#xff1a; https://bbs.kanxue.com/thread-170033.htm 开始时完全没有头绪&#xff0c;有虚拟壳&#xff0c;用ida打开也看…

AMEYA360:Panasonic松下HF系列压敏电阻器

Panasonic HF系列压敏电阻器符合AEC-Q200标准&#xff0c;最大允许额定电压为16VDC&#xff0c;钳位电压高达43A。这些紧凑型SMD压敏电阻器适合用于汽车应用&#xff0c;采用模制结构&#xff0c;因此能够耐受很强的“焊接热冲击”。这些压敏电阻器符合ISO7637-2和ISO16750-2负…

迪赛智慧数——饼图(玫瑰饼图):抑郁症发病群体年龄

效果图 痛心&#xff0c;震惊了全网&#xff0c;著名歌手李玟&#xff0c;抑郁症自杀离世&#xff01; 为什么看起来阳光开朗的人&#xff0c;也会得抑郁症&#xff1f;据数据调查显示&#xff0c;15-30岁为抑郁症的高发年纪&#xff0c;由于思想不够成熟&#xff0c;经验少&a…

QT开发技巧之QComboBox通过qss设置item高度,增加间隔

1.问题描述 QComboBox默认的下拉item间距太小&#xff0c;字挤在一起不好看&#xff0c;直接qss设置item高度但是没效果 2.解决后效果 可通过qss设置item的最小高度&#xff0c;增加间距&#xff0c;不同字体大小的combobox都能使用&#xff0c;简单方便 3.代码实现 &#xf…

葡萄牙语翻译,北京哪个公司比较好?

近年来&#xff0c;随着中国与各葡语系国家&#xff0c;特别是与巴西经贸、科技、文化交流的不断扩大&#xff0c;葡萄牙语翻译的需求也越来越大&#xff0c;但是专业葡语翻译人才紧缺。那么&#xff0c;如何做好葡萄牙语翻译&#xff0c;北京葡语翻译公司哪家好&#xff1f; 我…

分布式消息服务设计

分布式消息服务设计 背景 为了解决当A系统的一个“操作”需要发送一个通知&#xff08;生产者&#xff09;&#xff0c;由关心这个操作的业务&#xff08;消费者&#xff09;订阅消息并处理时&#xff0c;实现业务解耦&#xff0c;并适合分布式。本文主要讲解以消息中间件Rab…

Debug_性能分析工具_Perf +

目录 1. perf 作用 2. perf 安装 3. perf 使用示例 3.1 耗时统计&#xff0c;画出火焰图 1. 下载绘制火焰图的开源pl代码 2. 执行以下命令 3. 用浏览器打开svg文件&#xff0c;看当前进程各子模块耗时占比 1. perf 作用 Perf 是Linux kernel自带的系统性能优化工具。 P…

HCIA-HarmonyOS Application Developer学习笔记

目录 一、HarmonyOS 介绍二、HarmonyOS 应用开发流程HarmonyOS 系统架构HarmonyOS 子系统集DevEco StudioHarmonyOS 应用包结构使用资源文件的方法权限管理分布式能力 三、Ability 设计与开发Ability 的概念和分类页面生命周期Intent载体页面间导航Particle Ability 开发 四、U…

使用Vue脚手架2

ref属性 src/components/SchoolName.vue <template><div class"school"><h2>学校名称&#xff1a;{{name}}</h2><h2>学校地址&#xff1a;{{address}}</h2></div> </template><script>export default {name:…

【C++修炼之路】31.异常

每一个不曾起舞的日子都是对生命的辜负 异常 一.C语言传统的处理错误的方式二.C异常概念三.异常的使用3.1 异常的抛出和捕获3.2 异常的重新抛出3.3 异常安全3.4 异常规范 四.自定义异常体系五.C标准库的异常体系六.异常的优缺点 一.C语言传统的处理错误的方式 传统的错误处理机…

Idea运行springboot项目(保姆级教学)

**大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯…

PHP:对比数据库,隐藏不满足条件的标签;对比数据库,将标签中的内容更改为数据库中的对应项

一、查询数据库数据&#xff0c;A列数据如果等于前端div中的值&#xff0c;那么将div中的值给其赋值为对应数据库中B列的值 如下案例&#xff1a;以第一个为例&#xff0c;如果id为append1&#xff0c;并且此id等于满足条件的数据库中colum_name列中的append1&#xff0c;就将…

Windows安装 PostgreSQL数据库并进行简单数据操作

介绍&#xff1a; 在开发和管理数据库应用程序时&#xff0c;选择合适的数据库管理系统是至关重要的。PostgreSQL 是一个强大且广受欢迎的开源关系型数据库管理系统&#xff0c;它具有稳定性、可靠性和丰富的功能。本文将介绍如何在 Windows 操作系统上下载、安装 PostgreSQL&a…

6. QT环境下使用OPenCV(利用鼠标实现图像的ROI区域选择)

1. 说明 一张图像显示的内容可能并非所有的都是有用信息,有时需要选定某些区域做出特殊的处理。在OPenCV当中可以在图像上响应鼠标的操作,选取出图像上的特殊区域 — ROI区域。 效果展示: 2. 实现步骤 首先在QtCreator中创建一个新的widget项目,并配置好OPenCV的开发环…

【GIS】Python多线程转换NC格式文件为TIFF

汇总 【GIS】使用cdsapi下载ERA5和ERA5_land逐小时数据 NC格式介绍 说明 NC文件读取使用netCDF4,NC文件转换为TIF使用rasterio或者GDAL。 一些细节: 格点数据转换为TIFF文件时候,计算六参数时候,应该要考虑,格点数据存储的坐标属于栅格中心点的位置,转换为TIFF时候,…