首页 > 其他分享 >Map put的过程

Map put的过程

时间:2024-09-30 17:51:13浏览次数:7  
标签:Map HashMap map 键值 哈希 put 过程

1.是什么

        在Java中,Map是一个接口,它存储键值对(key-value pairs)。最常见的Map实现包括HashMapTreeMapLinkedHashMap等。尽管不同的Map实现可能在内部工作原理上有所不同,但它们都遵循相同的接口规范,包括put方法。

下面是HashMapput方法的一个详细解释,因为HashMapMap接口最常用的实现之一:

HashMap的put方法

HashMap基于哈希表实现,使用哈希码来存储和检索元素。它的put方法的主要步骤如下:

  1. 计算键的哈希码
    当调用put(K key, V value)方法时,首先会调用key对象的hashCode()方法来计算其哈希码。这个哈希码是一个整数,用于确定元素在哈希表中的位置(桶或索引)。

  2. 定位桶
    哈希码通过哈希函数(通常是(n - 1) & hash,其中n是哈希表的容量)转换为哈希表中的索引,即桶的位置。

  3. 处理冲突
    如果多个键具有相同的哈希码(哈希冲突),它们会被存储在同一个桶中。HashMap通过链表(在Java 8及以后,当链表长度超过一定阈值时,转换为红黑树)来解决哈希冲突。

  4. 存储键值对
    在定位到桶后,HashMap会检查桶中是否已存在具有相同键的条目:

    • 如果不存在,则创建一个新的Node(或Entry,在Java 8之前),将键、值和下一个节点的引用(初始为null)存储起来,并添加到桶中。
    • 如果存在,则更新该键对应的值(覆盖旧值)。
  5. 调整大小
    在添加元素后,HashMap会检查其大小是否超过了当前容量与加载因子的乘积(即阈值)。如果超过,则触发扩容操作,创建一个新的哈希表,并将所有元素重新哈希并插入到新的表中。

  6. 返回值
    put方法返回该映射中先前与指定键关联的值(如果以前没有与该键关联的值,则返回null)。这允许检查是否成功替换了旧值。

示例代码

import java.util.HashMap;  
import java.util.Map;  
  
public class HashMapExample {  
    public static void main(String[] args) {  
        Map<String, Integer> map = new HashMap<>();  
  
        // 添加键值对  
        map.put("apple", 1);  
        map.put("banana", 2);  
        map.put("orange", 3);  
  
        // 更新键值对  
        Integer oldValue = map.put("banana", 20);  
        System.out.println("Old value for 'banana': " + oldValue); // 输出: Old value for 'banana': 2  
  
        // 遍历Map  
        for (Map.Entry<String, Integer> entry : map.entrySet()) {  
            System.out.println(entry.getKey() + ": " + entry.getValue());  
        }  
    }  
}

        在这个例子中,我们创建了一个HashMap,添加了一些键值对,然后更新了其中一个键的值,并最后遍历并打印了所有的键值对。

标签:Map,HashMap,map,键值,哈希,put,过程
From: https://blog.csdn.net/2401_83418369/article/details/142661508

相关文章

  • Map的遍历方式
    1.是什么        在Java中,Map接口提供了多种遍历方式,以便你可以根据需要选择最适合的方法来访问和操作存储在映射中的键值对。以下是Map的几种常见遍历方式,以及每种方式的详细解释和示例代码。1.使用entrySet()遍历        这是最常用的遍历方式,因为它同时......
  • 2507 城市和州 map
    #include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintN=2e5+10;//使用map来记录每个城市前两个字母和州的组合出现的次数map<string,int>vis;stringa,b;intn,ans;intmain(){//读取城市的数量cin>>n;for(inti......
  • 2246 记录保存 map
    解决思路 读取输入:读取每组奶牛的名字。 排序:对每组奶牛的名字进行排序,以确保相同的组合总是以相同的顺序出现。 记录出现次数:使用 map 记录每组奶牛组合出现的次数。 计算最大次数:遍历 map,找到出现次数最多的组合。#include<bits/stdc++.h>#definell......
  • 通过 DISM 命令注入驱动程序到 WIM 镜像的步骤如下:使用 $OEM$ 文件夹是一个简便的方式
    通过DISM命令注入驱动程序到WIM镜像的步骤如下:1.挂载WIM镜像使用以下命令挂载WIM镜像:bashCopyCodeDism/Mount-Wim/WimFile:install.wim/Index:2/MountDir:mount/WimFile: 指定要挂载的WIM文件路径。/Index: 指定要挂载的映像索引(例如,2)。/MountDir: 指......
  • 十五、存储过程与函数
    文章目录0.引用1.存储过程概述1.1理解1.2分类2.创建存储过程2.1语法分析3.调用存储过程3.1调用格式3.2代码举例3.3如何调试4.存储函数的使用4.1语法分析4.2调用存储函数4.3代码举例4.4对比存储函数和存储过程5.存储过程和函数的查看、修改、删除5.1......
  • YOLOv8训练损失、mAP画图功能 | 支持多结果对比,多结果绘在一个图片(科研必备)
    鱼弦:公众号【红尘灯塔】,CSDN博客专家、内容合伙人、新星导师、全栈领域优质创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)YOLOv8训练损失、mAP画图功能|支持多结果对比,多结果绘在一个图片(科研必备)......
  • 除氟剂在锂电池回收处理过程中的应用(学习笔记)
    除氟剂在锂电池回收处理过程中的应用是至关重要的,主要目的是去除回收废液中的氟离子,以保护后续处理设备、提高回收金属的品质,并减少对环境的污染。以下是除氟剂在锂电池回收处理过程中的详细应用:一、应用背景在锂电池的回收处理过程中,废旧电池经过拆解、放电、破碎、浸出等......
  • 恋爱虽易,相处不易:当EntityFramework爱上AutoMapper
    恋爱虽易,相处不易:当EntityFramework爱上AutoMapper  剧情开始为何相爱?相处的问题?女人的伟大?剧情收尾?有时候相识即是一种缘分,相爱也不需要太多的理由,一个眼神足矣,当EntityFramework遇上AutoMapper,就是如此,恋爱虽易,相处不易。在DDD(领域驱动设计)中,使用AutoMap......
  • HashMap原理
    HashMap原理在很多地方都会利用到hash表来提高查找效率。在Java的Object类中有一个方法:publicnativeinthashCode();```根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现。为何Object类需要这样一个方法?它......
  • Vue computed 与 watch
    在Vue.js框架中,computed和watch都是响应式系统的一部分,但它们在功能和用途上有所不同。computed(计算属性):Computed是基于它们的依赖进行缓存的,只有当依赖项发生改变时才会重新计算。它们通常用于当你需要根据现有数据派生出一些状态时。Computed可以有getter和setter,但默认只......