了解HashMap原理对于日后的缓存机制多少有些认识。在网络中也有很多方面的帖子,但是很多都是轻描淡写,很少有把握的比较准确的信息,在这里试着不妨说解一二,本文并非原创,对本文有兴趣的读者可以看数据结构和Java集合框架,本文是对其第13章的总结,做了几年的开发,是时候总结一下了。
HashMap实现了Map接口,HashMap主要以键值(key-value)的方式来体现,笼统的说就是采用key值的哈希算法,外加取余最终获取索引,而这个索引可以认定是一种地址,既而把相应的value存储在地址指向内容中。这样说或许比较概念化,也可能复述不够清楚,来看列式更加清晰:
int hash=key.hashCode();//------------------------1
int index=hash%table.lenth;//table表示当前对象的长度-----------------------2
其实最终就是这两个式子决定了值得存储位置。但是以上两个表达式还有欠缺。为什么这么说?例如在key.hashCode()后可能存在是一个负整数,你会问:是啊,那这个时候怎么办呢?所以在这里就需要进一步加强改造式子2了,修改后的:
int index=(hash&Ox7FFFFFFF)%table.lenth;
到这里又迷惑了,为什么上面是这样的呢?对于先前我们谈到在hash有可能产生负数的情况,这里我们使用当前的hash做一个“与”操作,在这里需要和int最大的值相“与”。这样的话就可以保证数据的统一性,把有符号的数值给“与”掉。而一般这里我们把二进制的数值转换成16进制的就变成了:Ox7FFFFFFF。(注:与操作的方式为,不同为0,相同为1)。
例子:
10000000000000000000010001010111 //比如散列值为-1111
& 01111111111111111111111111111111 //与上int的最大值
00000000000000000000010001010111 //结果去掉了最前面的符号位
而对于hashCode()的方法一般有:
public int hashCode(){
int hash=0,offset,len=count;
char[] var=value;
for(int i=0;i<< 30;//最大上限
static final float DEFAULT_LOAD_FACTOR = 0.75f;//超过3/4时,容器的容量将会增加一倍+1
这里的格式与Word文档中有较大差异,如果阅读不方便,请下载附件!
分享到:
相关推荐
### 数据结构与Java集合框架知识点概述 #### 一、数据结构基础 1. **定义**: - 数据结构是计算机科学中的一个基本概念,指在计算机中存储、组织数据的方式。 - 它不仅涉及数据如何存储,还包括数据之间如何关联...
### Java数据结构与算法学习笔记知识点总结 #### 一、数据结构概述 数据结构是对数据的一种组织形式,它决定了数据的存储方式以及处理数据的方法。常见的数据结构包括但不限于数组、链表、栈、队列、二叉树、图等...
基于java的开发源码-哈希计算工具 Java-hash.zip 基于java的开发源码-哈希计算工具 Java-hash.zip 基于java的开发源码-哈希计算工具 Java-hash.zip 基于java的开发源码-哈希计算工具 Java-hash.zip 基于java的开发...
在Java集合框架中,Map接口的实现类广泛用于存储键值对数据结构。主要实现类包括HashMap、Hashtable、LinkedHashMap和TreeMap。 1. HashMap:它利用键的hashCode值存储数据,根据键快速定位到值。由于使用了哈希表...
HashMap的数据结构hash()函数JDK1.8新增红黑树总结能否使用任何类作为Map的key?为什么HashMap中String、Integer这样的包装类适合作为K?如果使用Object作为HashMap的Key,应该怎么办呢?HashMap为什么不直接使用...
本课件“数据结构 课件java版本”是基于Java编程语言来讲解这一主题的,旨在帮助学生和开发者深入理解数据结构的基本概念,并掌握用Java实现这些数据结构的方法。 在Java中,数据结构主要分为以下几类: 1. **数组...
Java 集合框架是 Java 语言中的一组预定义类和接口的集合,用于存储和操作数据。下面是 Java 集合框架的知识点总结: 1. Java 集合类主要有两大分支:Collection 接口和 Map 接口。Collection 接口实现了 iterator ...
glsl-hash-blur 使用随机散列来计算样本偏移量的快速模糊效果。 这会给模糊带来下雪/颗粒感。 需要时,您必须指定sample函数和iterations ( const或#define整数)。 vec3 tex( vec2 uv); #pragma glslify : blur...
Java集合框架包括List、Set和Queue接口,以及ArrayList、LinkedList、HashSet、 TreeSet、HashMap、TreeMap等实现类。集合用于存储一组不重复的对象,而Map则关联键值对,提供高效的查找和访问。例如,HashMap以散列...
在计算机科学中,哈希(Hash)算法是一种用于将任意长度的数据映射为固定长度输出的函数。这种输出通常称为哈希值或消息摘要。在Java编程语言中,实现哈希算法可以方便地用于数据验证、查找表以及密码存储等多种用途...
在IT领域,尤其是在Java编程中,Map集合是一个重要的数据结构,它存储键值对,提供高效的数据检索。在本课程“【IT十八掌徐培成】Java基础第11天-03.Map集合-hash原理2”中,我们将深入探讨Map集合的内部机制,特别...
Java哈希算法排序算法数据结构知识点总结 以下是关于Java哈希算法排序算法数据结构的知识点总结: 1. 哈希算法的速度问题:在讨论哈希算法的速度问题时,需要考虑到哈希函数的选择和实现方式。在大多数情况下,...
`HashMap`和`HashSet`是常用的散列数据结构,它们基于散列函数实现快速的插入、查找和删除操作。 在“hash-practice”项目中,我们可以看到作者可能在练习如何在Maven项目中使用散列技术。Maven是Java项目管理和...
10. **Java中的冲突解决**: 在Java集合框架中,如HashMap,哈希冲突是通过链表或红黑树来解决的。当两个键的哈希值相同但键本身不同时,它们会被放入同一个桶中,形成链表或红黑树结构。 综上所述,`java-hash.7z` ...
Java 集合框架是 Java 语言中的一种数据结构,用于存储和操作多个对象引用。 Java 集合类可以分为 Set、List 和 Map 三种体系,分别用于存储无序、不可重复的集合、有序、可重复的集合和具有映射关系的集合。 ...
在本课程“【IT十八掌徐培成】Java基础第11天-02.Map集合-hash原理”中,将深入探讨Map集合以及其背后的哈希原理。 Map接口不继承Collection接口,而是独立的一类数据结构,其核心方法包括put()用于添加键值对,get...
以上是根据文件的标题、描述、标签和部分预览内容总结出的数据结构与算法知识点。这些知识点是IT行业中软件开发人员必备的基础知识,广泛应用于软件设计、算法实现、系统优化等众多领域。掌握这些知识点能够帮助IT...