iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java HashMap中怎么放入元素
  • 791
分享到

Java HashMap中怎么放入元素

2023-06-17 11:06:28 791人浏览 薄情痞子
摘要

这篇文章主要讲解了“Java HashMap中怎么放入元素”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java HashMap中怎么放入元素”吧!有了hash code,来考虑如何计算放入

这篇文章主要讲解了“Java HashMap中怎么放入元素”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java HashMap中怎么放入元素”吧!

有了hash code,来考虑如何计算放入数组的位置。hash code值通常会很大,但是数组的大小有限,默认只有16,大的也不能超过2的30次方。所以,用模运算来保证在数组大小范围内是合理的,比如:index = hash code % array size.不过这有点慢,jdk采用了更快的算法。这个更快的算法源于一个数学规律,就是如果size是2的N次方,那么数X对size的模运算结果等价于X和size-1的按位与运算,也就是 X % size <=> X & (size -1).按位与只消耗一个CPU周期,当然快多了。现在就可理解为什么要故意把数组大小弄成2的N次方了。再回头看一开始计算数组大小的代码,完全理解了。

int capacity = 1;          while (capacity < initialCapacity)              capacity <<= 1;

比如size=16,二进制表示如下:(32位)

0000000000000000000000000010000

size-1=15,表示如下:

0000000000000000000000000001111

假如hash code=4

0000000000000000000000000000100

4 & 15 结果为:

0000000000000000000000000000100

假如hash code=6

0000000000000000000000000000101

6 & 15 结果为:

0000000000000000000000000000101

假如hash code=38

0000000000000000000000000100110

38 & 15 结果为:

0000000000000000000000000000110

通过观察这三个例子,又可以发现一个特点,也就是X & size-1 的结果受到了size的阶数的限制,这里size=16,阶数为4.结果就是只用低4位的1和X按位与,而X的高位没有用到。这会导致重复率相当高。如果用一个算法将X的低位重新计算,比如根据所有位的值进行重新计算,就可以使得hash值分布更均匀。下面的代码揭示了在真正按位与之前,调用了hash函数,进行了一堆位运算。至于为什么用这个算法,我也不知道其来历。

public V put(K key, V value) {          if (key == null)              return putForNullKey(value);          int hash = hash(key.hashCode());          int i = indexFor(hash, table.length);          for (Entry<K,V> e = table[i]; e != null; e = e.next) {              Object k;              if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {                  V oldValue = e.value;                  e.value = value;                  e.recordAccess(this);                  return oldValue;              }          }           modCount++;          addEntry(hash, key, value, i);          return null;      }       static int hash(int h) {          // This function ensures that hashCodes that differ only by          // constant multiples at each bit position have a bounded          // number of collisions (approximately 8 at default load factor).          h ^= (h >>> 20) ^ (h >>> 12);          return h ^ (h >>> 7) ^ (h >>> 4);      }       static int indexFor(int h, int length) {          return h & (length-1);      }       void addEntry(int hash, K key, V value, int bucketIndex) {          Entry<K,V> e = table[bucketIndex];          table[bucketIndex] = new Entry<K,V>(hash, key, value, e);          if (size++ >= threshold)              resize(2 * table.length);      }

上面的for循环是查找并替换符合条件的对象,如果找不到,则添加新的对象。查找到的条件(必须都满足)是:

hash值相等

key的引用相同或者key的值相等。

感谢各位的阅读,以上就是“Java HashMap中怎么放入元素”的内容了,经过本文的学习后,相信大家对Java HashMap中怎么放入元素这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Java HashMap中怎么放入元素

本文链接: https://www.lsjlt.com/news/288473.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java HashMap中怎么放入元素
    这篇文章主要讲解了“Java HashMap中怎么放入元素”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java HashMap中怎么放入元素”吧!有了hash code,来考虑如何计算放入...
    99+
    2023-06-17
  • css怎么缩放div元素
    本篇内容介绍了“css怎么缩放div元素”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • java 中的HashMap的底层实现和元素添加流程
    目录HashMap 底层实现HashMap 插入流程为什么要将链表转红黑树?哈希算法实现总结前言: HashMap 是使用频率最高的数据类型之一,同时也是面试必问的问题之一,尤其是它...
    99+
    2024-04-02
  • php表格如何放入数组元素
    在PHP中,数组是一种非常常用的数据类型,它可以存储多个值并对这些值进行操作。而在处理表格数据时,数组也是最常见的一种数据结构。我们可以使用PHP的数组来存储表格中的每一行数据,每一行数据又可以看成是一个由多个元素组成的数组。那么,如何将表...
    99+
    2023-05-19
  • java中document怎么获取元素
    在Java中,可以使用以下方式来获取元素:1. 根据元素的标签名获取元素:```javaElement element = docu...
    99+
    2023-10-11
    java
  • 使用java怎么向数组插入元素
    这篇文章将为大家详细讲解有关使用java怎么向数组插入元素,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分...
    99+
    2023-06-14
  • 深入理解Java中的HashMap
    目录一、HashMap的结构图示二、HashMap的成员变量以及含义2.1、hash方法说明2.2、tableSizeFor方法说明三、HashMap的构造方法四、HashMap元素...
    99+
    2024-04-02
  • java怎么打印list中的元素
    要打印List中的元素,可以使用循环遍历List并逐个打印每个元素。以下是在Java中打印List中元素的示例代码: import ...
    99+
    2024-03-13
    java
  • 怎么向redis列表中加入元素
    使用Redis的LPUSH或RPUSH命令可以向列表中插入元素。1. 使用LPUSH命令向列表的左侧插入一个或多个元素:```LPU...
    99+
    2023-09-04
    redis
  • java中hashmap怎么使用
    HashMap是Java中常用的数据结构之一,它是一个无序的键值对集合,可以存储不同类型的键和值。以下是HashMap的基本用法:1...
    99+
    2023-09-14
    java
  • java数组怎么插入元素并快捷排序
    小编给大家分享一下java数组怎么插入元素并快捷排序,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java的特点有哪些Java的特点有哪些1.Java语言作为静态...
    99+
    2023-06-14
  • java中Count怎么计算流中的元素
    这篇文章将为大家详细讲解有关java中Count怎么计算流中的元素,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. ...
    99+
    2023-06-14
  • HTML5中怎么在a标签内放置块级元素
    HTML5中怎么在a标签内放置块级元素,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 对比起XHTML来说,HT...
    99+
    2024-04-02
  • 怎么在java中引用数组元素
    本篇文章为大家展示了怎么在java中引用数组元素,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。定义并用运算符new为之分配空间后,才可以引用数组中的每个元素,数组元素的引用方式为:(1)arrayN...
    99+
    2023-06-06
  • java中怎么给数组元素赋值
    在Java中,可以使用循环结构来遍历数组,并给数组元素赋值。以下是几种常见的给数组元素赋值的方式:1. 使用循环结构逐个给数组元素赋...
    99+
    2023-10-18
    java
  • java Stream怎么操作元素
    本篇内容主要讲解“java Stream怎么操作元素”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java Stream怎么操作元素”吧!说明java.util.Stream代表了一系列能够执行...
    99+
    2023-06-30
  • 怎么在java中使用Stream操作元素
    怎么在java中使用Stream操作元素?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;...
    99+
    2023-06-14
  • 怎么在java中使用LinkedHashMap添加元素
    怎么在java中使用LinkedHashMap添加元素?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java的特点有哪些Java的特点有哪些1.Java语言作为...
    99+
    2023-06-14
  • 怎么在java中删除数组元素作
    怎么在java中删除数组元素作?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、...
    99+
    2023-06-14
  • Java中怎么删除ArrayList的重复元素
    Java中怎么删除ArrayList的重复元素,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。方法1:使用HashSet删除ArrayList中重复的元素在该方法...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作