Java.数据结构.HashMap

news2024/11/30 3:44:46

目录

1基本概念

2数据结构

 3常用操作 

3.1 put(K key, V value):插入键值对。

3.2 get(Object key):根据键获取值。

3.3 remove(Object key):移除键值对。

3.4 containsKey(Object key):判断Map中是否包含指定的键。

3.5 containsValue(Object value):判断Map中是否包含指定的值。、

3.6 keySet():返回Map中所有键的集合。

3.7 values():返回Map中所有值的集合。

3.8 entrySet():返回Map中所有键值对的集合。

3.9 类计数数组作用。

优缺点:

注意事项:


1基本概念

  • HashMap是Java集合框架中的一个类,实现了Map接口。
  • 它使用键值对(key-value)的方式存储数据,允许使用null键和null值(但null键只能有一个)。
  • HashMap不保证映射的顺序,即插入顺序和遍历顺序可能不同

2数据结构

  • JDK 1.7及以前:HashMap的底层实现是数组+链表(每个数组存放一个链表的头结点)。
  • JDK 1.8及以后:HashMap的底层实现优化为数组+链表或红黑树。当链表长度超过一定阈值(默认为8)时,会自动将链表转换为红黑树,以提高查找效率
  • HashMap使用哈希函数将键映射到数组的索引位置。
  • 如果多个键映射到同一个索引位置,则使用链表或红黑树来处理哈希冲突。

假如我们输入1,4,5,6,7,9这串数字,那么其内部就是这样的结构。

 3常用操作 

  • 3.1 put(K key, V value):插入键值对。
  • 注意:由于 key 值唯一,存放相同 key 的 value 值时,后放入的值会覆盖之前的value值。
  • HashMap<String, Integer> map = new HashMap<>();  
    map.put("apple", 1);  
    map.put("banana", 2);
  • 3.2 get(Object key):根据键获取值。
  • Integer value = map.get("apple");  
    System.out.println(value);  // 输出: 1
  •     getOrDefault():根据键获取值,若没有则返回默认值。
  • Integer value = map.getOrDefault(apple,10);//若没有对应的key值的返回 10
  • 3.3 remove(Object key):移除键值对。
  • map.remove("banana");
  • 3.4 containsKey(Object key):判断Map中是否包含指定的键。
  • boolean containsKey = map.containsKey("apple");  
    System.out.println(containsKey);  // 输出: true
  • 3.5 containsValue(Object value):判断Map中是否包含指定的值。、
  • boolean containsValue = map.containsValue(1);  
    System.out.println(containsValue);  // 输出: true
  • 3.6 keySet():返回Map中所有键的集合。
  • Set<String> keySet = map.keySet();  
    System.out.println(keySet);  // 输出: [apple] (假设已移除banana)
    我们常常用foreach循环来遍历map中的key值
  •         for (Integer key: map.keySet()) {
                if(map.get(key)==1){
                    return key;
                }
            }
  • 3.7 values():返回Map中所有值的集合。
  • Set<String> keySet = map.keySet();  
    System.out.println(keySet);  // 输出: [apple] (假设已移除banana)
  • 3.8 entrySet():返回Map中所有键值对的集合。
  • Set<Map.Entry<String, Integer>> entrySet = map.entrySet();  
    for (Map.Entry<String, Integer> entry : entrySet) {  
        System.out.println(entry.getKey() + ": " + entry.getValue());  
    }
  • 3.9 类计数数组作用
  • 除了上面这些作用,我们还常常利用put和getOrDefault来模拟计数数组的作用
  •  for (int i = 0; i < nums.length; i++) {
                map.put(nums[i],map.getOrDefault(nums[i],0)+1);
            }

    这样 map 中的 value 值就等于 k 其 key 值在 nums 数组中出现的次数

优缺点:

  • 缺点:非线程安全、不保证顺序。
  • 快速查找(平均时间复杂度为O(1))、灵活(可以存储不同类型的对象)

注意事项:

  • HashMap的扩容机制:当容量达到阈值(默认是当前容量的0.75倍)时,会发生扩容,容量变为原来的两倍,此时需要重新哈希已有的键值对。

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

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

相关文章

【Orange Pi 5 嵌入式应用编程】-用户空间SPI通信

用户空间SPI通信 文章目录 用户空间SPI通信1、理解SPI通信协议1.1 什么是SPI通信协议1.2 SPI如何工作?1.3 SPI数据传输步骤1.4 SPI的优缺点2、嵌入式Linux系统中的SPI通信3、Orange Pi 5 配置与编程3.1 Orange Pi 5开发板配置SPI3.2 SPI编程实现3.2.1 SPI用户空间函数定义3.2.…

Kafka 快速入门

目录 介绍 KafKa 相关术语 ​编辑 Kafka的工作流程 生产者向kafka发送数据的流程 Kafka选择分区的模式 Kafka选择分区的模式 数据消费 kafka的文件存储机制 topic、partition和segment 存储和查找message的过程 数据写入过程 数据查找过程 注意事项 kafka管理UI …

基于Springboot+Vue的高校学术交流平台 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

论文阅读笔记-LogME: Practical Assessment of Pre-trained Models for Transfer Learning

前言 在NLP领域,预训练模型(准确的说应该是预训练语言模型)似乎已经成为各大任务必备的模块了,经常有看到文章称后BERT时代或后XXX时代,分析对比了许多主流模型的优缺点,这些相对而言有些停留在理论层面,可是有时候对于手上正在解决的任务,要用到预训练语言模型时,面…

Spring Boot项目的创建与使用

1.通过IDE创建Spring Boot项目 2.目录结构 3.新建TestController控制器 Controller public class TestController {RequestMapping("/test")public ModelAndView test(RequestParam(name "name", defaultValue "刘德华") String name){ModelA…

Pikachu-unsafe upfileupload-getimagesize

什么是getimagesize()&#xff1f; getimagesize()是PHP中用于获取图像的大小和格式的函数。它可以返回一个包含图像的宽度、高度、类型和MIME类型的数组。 由于返回的这个类型可以被伪造&#xff0c;如果用这个函数来获取图片类型&#xff0c;从而判断是否时图片的话&#xff…

matplotlib字体警告

import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] "Arial" plt.rcParams["figure.figsize"] (3, 3) plt.rcParams[font.size] 12sc.pl.umap(adata_concat, color[batch_name, Ground Truth, mclust], ncols3, wspace0.5, showTrue)结果如…

谷歌 DeepMind 发布 AlphaChip:AI 加速芯片设计,效率提升惊人!

近日&#xff0c;谷歌 DeepMind 公布了其最新的 AI 系统 ——AlphaChip。这一系统致力于加速和优化计算机芯片的开发&#xff0c;AlphaChip 所设计的芯片布局已经在谷歌的 AI 加速器中得到应用。 AlphaChip 的工作原理类似于我们之前所听说的 AlphaGo 和 AlphaZero&#xff0c…

NASA:北极植被地块 ATLAS 项目 北坡和苏厄德半岛,明尼苏达州,1998-2000 年

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 Arctic Vegetation Plots ATLAS Project North Slope and Seward Peninsula, AK, 1998-2000 简介 文档修订日期&#xff1a;2018-12-31 数据集版本&#xff1a;1 本数据集提供了在北极陆地-大气系统…

模拟算法(5)_数青蛙

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 模拟算法(5)_数青蛙 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. 题目链接…

Java项目实战II基于Java+Spring Boot+MySQL的房产销售系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 随着房地产市场的蓬勃发展&#xff0c;房产销售业务日益复杂&#xff0c;传统的手工管理方式已难以满…

旅游平台|智慧旅游平台|基于java的智慧旅游平台设计与实现(源码+数据库+文档)

智慧旅游平台 目录 基于java的智慧旅游平台设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xff0c;阿里云开发…

[C++]使用纯opencv部署yolov11-pose姿态估计onnx模型

【算法介绍】 使用纯OpenCV部署YOLOv11-Pose姿态估计ONNX模型是一项具有挑战性的任务&#xff0c;因为YOLOv11通常是用PyTorch等深度学习框架实现的&#xff0c;而OpenCV本身并不直接支持加载和运行PyTorch模型。然而&#xff0c;可以通过一些间接的方法来实现这一目标&#x…

打造银行智能营销助手:大模型助力精准营销

在金融科技快速发展的时代&#xff0c;银行的业务模式和客户需求都发生了巨大变化。为了应对日益激烈的市场竞争&#xff0c;银行必须依托先进技术&#xff0c;提升客户服务水平和营销效率。银行智能营销助手应运而生&#xff0c;它通过结合知识图谱和大模型&#xff08;LLM&am…

Ubuntu22.04 Docker 国内安装最靠谱教程

目前docker在国内安装常存在众所周知的网络问题&#xff0c;如果安装过程如果从官网地址安装以及安装之后从官网要拉取镜像都存在问题。这篇文章主要针对这两个问题总结最靠谱的docker安装教程。 1. docker安装 1.1 系统环境概述 Ubuntu 22.04linux内核版本 6.8&#xff08;…

红帽操作系统Linux基本命令2( Linux 网络操作系统 06)

本文接着上篇Linux常用命令-1继续往后学习其他常用命令。 2.3 目录操作类命令 1&#xff0e;mkdir命令 mkdir命令用于创建一个目录。该命令的语法为&#xff1a; 上述目录名可以为相对路径&#xff0c;也可以为绝对路径。 mkdir命令的常用参数选项如下。 -p&#xff1a;在创…

第十一章 缓存

目录 一、什么是缓存 二、缓存更新策略 2.1. 缓存主动更新策略 2.1.1. Cache Aside模式&#xff08;主流&#xff09;‌ 2.1.2. Read/Write Through模式‌ 2.1‌.3. Write Behind模式‌ 2.1.4. 总结 三、缓存穿透 四、缓存雪崩 五、缓存击穿 本文中的图片内容部分来源…

[ 蓝桥 ·算法双周赛 ] 第 19 场 小白入门赛

&#x1f525;博客介绍&#xff1a; EvLast &#x1f3a5;系列专栏&#xff1a; <<数据结构与算法>> << 算法入门>> << C项目>> &#x1f3a5; 当前专栏: << 算法入门>> 专题 : 帮助小白快速入门算法竞赛 &#x1f44d…

【python实操】python小程序之两数取大值以及login登录

引言 python小程序之两数取大值以及login登录 文章目录 引言一、两数取大值1.1 题目1.2 代码1.3 代码解释 二、login登录2.1 题目2.2 代码2.3 代码解释 三、思考3.1 两数取大值3.2 login登录 一、两数取大值 1.1 题目 定义一个函数my_max&#xff0c;包含两个参数, 函数的作用…

《ASP.NET Web Forms 实现视频点赞功能的完整示例》

在现代Web开发中&#xff0c;实现一个动态的点赞功能是非常常见的需求。本文将详细介绍如何在ASP.NET Web Forms中实现一个视频点赞功能&#xff0c;包括前端页面的展示和后端的处理逻辑。我们将确保点赞数量能够实时更新&#xff0c;而无需刷新整个页面。 技术栈 ASP.NET We…