首页
学习
活动
专区
圈层
工具
发布

解析HashMap中的put方法

引言 在Java集合中,HashMap的重要性不言而喻,作为一种存储键值对的数据结构,它在日常开发中有着非常多的应用场景,也是面试中的高频考点,本篇文章就来分析一下HashMap集合中的put方法。...put方法的执行流程 我们直接通过一个程序来理解HashMap中put方法的执行流程,在put方法中,HashMap需要经历初始化、存值、扩容、解决冲突等等操作: public static void...所以,HashMap在第一次调用put方法时会创建一个总容量为16的Node类型数组(前提是调用无参构造方法),但实际上只有12的容量可以被使用,当第13个元素插入时,就需要考虑扩容。...,则HashMap会自动将容量扩充至16 若是调用HashMap的无参构造方法,则将在第一次执行put方法时初始化一个总容量为16,实际可用容量为12的Node数组 当实际容量超过阈值时,HashMap...64,则进行扩容;当链表长度小于6,则会将红黑树转回链表 因为HashMap会根据key的hash值计算插入位置,所以key的数据类型一定要重写hashCode方法,否则会出现两个相同的key结果hash

89410

HashMap中的添加数据put方法:深入解析HashMap中的put方法——逐步揭秘数据添加过程

它的put方法是最常用的操作之一,本篇博客将深入探讨HashMap的put方法,逐步分解每个步骤,以便更好地理解数据的添加过程。 1....确定哈希桶位置 在HashMap中,元素是通过哈希函数计算得到的哈希码(hash code)来确定存储位置的。put方法首先会根据键的哈希码计算出存储桶(bucket)的位置。 2....//添加数据--->进入此方法 } } public V put(K key, V value) { return putVal...的put方法是一个复杂的过程,它涉及到了哈希桶的位置计算、冲突处理、链表转红黑树、键值对的替换与新增,以及在需要的情况下进行扩容等。...了解这些步骤能够更好地理解HashMap的内部工作机制,为使用和优化HashMap提供了基础。

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    java 避免出现NullPointerException(空指针)的方法总结

    java 避免出现NullPointerException(空指针)的方法总结 Java应用中抛出的空指针异常是解决空指针的最好方式,也是写出能顺利工作的健壮程序的关键。...2) 当valueOf()和toString()返回相同的结果时,宁愿使用前者。..." 3) 使用null安全的方法和库 有很多开源库已经为您做了繁重的空指针检查工作。...通过使用像@NotNull和@Nullable之类的annotation来声明一个方法是否是空指针安全的。...大部分空指针异常的出现是因为使用不完整的信息创建对象或者未提供所有的依赖项。如果你不允许创建不完整的对象并优雅地拒绝这些请求,你可以在接下来的工作者预防大量的空指针异常。

    3.5K20

    力扣(同构字符串解析)——学习到HashMap的put方法返回值

    如图,该题的本质其实就是寻找相同字符的位置是否一样 遍历这个字符串的每个字符,并将其下标位置存入map中,如果字符重复,则将下标位置进行替换 同时比较每个字符的位置,如果重复字符的位置不一样,则映射关系不成立...HashMap的put方法返回值 put方法返回值为null或者value; 如果key没有重复,put成功,则返回null 如果key重复了,返回的是map.get(key),也就是当前这个key...对应的value,同时覆盖掉当前value class Solution { public boolean isIsomorphic(String s, String t) {...Map map= new HashMap(); for (int i=0; i < s.length(); i++) { if(map.put...= map.put(t.charAt(i)+"",i)) return false; } return true; } }

    47330

    adb出现adb server is out of date时的解决的方法

    出错的原因是adb的port被其它程序的进程占据了,所以要做的就是找到并kill该进程。...我也不太懂,或许软件使用的port号是固定的) 2、再运行netstat -ano | findstr “5037” ,会看到例如以下类似的情形: 这里略微解释一下,显示的从左到右的意思各自是,连接类型...这里有两个进程占领着5037port,当中一个占领的是本地的5037port,另外一个占领的是外部的5037port,要干掉的当然就是那个本地的PID为240的port啦!...点击进程,如今要找的是PID为240的进程。有时候可能会发现任务管理器里没有进程PID的信息显示,这时候仅仅要点击任务管理器的查看–>选择列,然后把PID勾选上就可以。...这时候再次查看当前进程的PID,把PID为240的进程kill掉就可以。

    55410

    springboot+mybatis出现空指针异常时出现的问题及解决方法

    今天遇见了一个问题,困扰了一段时间,试了几种方法,但是还是解决不了,主要的精力还是放在了mybatis插入控制时的问题。但是对于空指针异常有多重问题引起。...String pId = params.get(“pId”).toString(); –>优先使用String.valueOf()方法代替toString() 当程序代码需要对象的字符串表示形式时...,请避免使用该对象的toString方法。...如果你的对象的引用等于null,NullPointerException则会抛出, 使用静态String.valueOf方法,该方法不会抛出任何异常并打印”null” //使用这种方式则可以避免出现空指针异常...String pId = String.valueOf(params.get(“pId”)); 1 2 3 4 5 6 7 8 此外,使用mybatis插入空值时出现异常,这个解决方法是将

    3.3K20

    HashMap和Hashtable有什么区别?

    1.线程安全性  Hashtable是线程安全的,它的方法都是同步的。而HashMap则不是线程安全的,如果多个线程同时访问一个HashMap实例,那么可能会出现竞态条件导致数据不一致。...由于Hashtable内部使用了链表,所以当链表较长时,性能会受到影响,而HashMap则没有这个问题。  ...3.在使用HashMap时,如果需要保证元素的顺序,则应该使用LinkedHashMap,它保证遍历元素的顺序是按照插入的顺序。  ...4.在使用Hashtable时,应该尽量避免使用Enumeration迭代器,因为它是旧版的API,可能会存在一些问题。推荐使用Iterator迭代器。  ...5.在使用HashMap时,应该尽量避免使用默认的初始容量和负载因子,因为这可能会导致HashMap频繁扩容和重新散列,影响性能。应该根据实际情况来选择合适的初始容量和负载因子。

    18400

    Ubuntu更新软件时出现boot空间不足的解决方法

    由于磁盘空间不够大,Ubuntu软件更新升级时经常会提醒/boot空间不足的问题,一般是由于多次升级内核后,导致内核版本太多,占用了一些磁盘空间,清理一下没用的内核文件及其他文件就好了。...本文测试环境:Ubuntu 17.10,当然其他版本,比如Ubuntu 17.04、Ubuntu 16.04、Ubuntu 14.04也是可以的。...二、通过Ubuntu Tweak解决 Ubuntu Tweak 好像以前常用的 Windows 优化大师,可以对系统和桌面做一些优化设置,如编辑主题、清除老内核、系统字体设置、启动器设置等等。...2、使用Ubuntu Tweak的电脑清道夫(computer janitor)功能 使用Ubuntu Tweak不仅可以清除老内核,也可以清除其他缓存文件。...再来看看还有哪些内核,因为我已经将旧的内核删除了,所以后面显示deinstall,不删除的话是install。

    1.6K30

    adb出现adb server is out of date时的解决的方法「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 出错的原因是adb的port被其它程序的进程占据了,所以要做的就是找到并kill该进程。...我也不太懂,或许软件使用的port号是固定的) 2、再运行netstat -ano | findstr “5037” ,会看到例如以下类似的情形: 这里略微解释一下,显示的从左到右的意思各自是,连接类型...这里有两个进程占领着5037port,当中一个占领的是本地的5037port,另外一个占领的是外部的5037port,要干掉的当然就是那个本地的PID为240的port啦!...点击进程,如今要找的是PID为240的进程。有时候可能会发现任务管理器里没有进程PID的信息显示,这时候仅仅要点击任务管理器的查看–>选择列,然后把PID勾选上就可以。...这时候再次查看当前进程的PID,把PID为240的进程kill掉就可以。

    2K20

    HashMap的resezi方法中尾部遍历出现死循环问题 Tail Traversing (多线程)

    一、背景介绍: 在看HashMap源码是看到了resize()的源代码,当时发现在将old链表中引用数据复制到新的链表中时,发现复制过程中时,源码是进行了反序,此时是允许反序存储的,同时这样设计的效率要高...下面对该原理进行总结: JDK1.7的HashMap在实现resize()时,新table[]的列表采用LIFO方式,即队头插入。这样做的目的是:避免尾部遍历。...HashMap在“多线程环境下”的死循环问题 问题的症状 从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题。...后来,我们的程序性能有问题,所以需要变成多线程的,于是,变成多线程后到了线上,发现程序经常占了100%的CPU,查看堆栈,你会发现程序都Hang在了HashMap.get()这个方法上了,重启程序后问题消失...于是,当我们的线程一调用到,HashTable.get(11)时,悲剧就出现了——Infinite Loop。

    1K40

    HashMap和Hashtable的key和value可以为null吗,ConcurrentHashMap呢

    value也不能为nullHashtable的put方法源码为:public synchronized V put(K key, V value) { // Make sure the value...int hash = key.hashCode(),当key为null时,key.hashCode()会报空指针异常同理value为null,throw new NullPointerException...() 也会抛出异常所以Hashtable的key、value都不能为空(区别与HashMap的put、hash方法)如果希望允许key为null,就得改写put方法中的hashCode函数,HashMap...尽管如此,使用 null 键时仍需谨慎,因为它可能会导致代码难以理解和维护,并且在多线程环境下如果没有正确同步,会增加并发问题的风险。...五、总结HashMap的key、value都可以为nullhashMap中使用hash()方法来计算key的哈希值,当key为空时,直接令key的哈希值为0,不走key.hashCode()方法;HashMap

    29910

    pycharm输出中文出现乱码的几种解决方法以及读取时打印出现乱码的解决

    pycharm打印中文出现乱码,有几种情况 第一种: 对于这种情况,是普通的一种,你需要检查开头,是否加了 # -*- coding:utf-8 -*- 还有 import sys reload(sys...) sys.setdefaultencoding('utf-8') 对于这两个处理中文输出的代码,最好每次处理中文时就加上,会减少很多问题 第二种问题: 这个网上有很多人说过,就是进入setting...= i.decode('utf-8') 这是一种常规的做法,将字符输出是编码,还有一种就是在读入数据的时候就将字符编码 # 使用codecs直接开unicode通道 import codecs file...= codecs.open("test", "r", "utf-8") for i in file: print type(i) # i的类型是unicode的 这里使用了codecs...库,这是一种 Python自带处理各种字符编码的字符串和文件的库,对文件的读入,爬虫网页的读入,都有很好的效果,网上有很多教程,这里就不多赘述。

    6.8K20
    领券