作者:小傅哥 博客:https://bugstack.cn 目录 一.前言 二.HashCode为什么使用31作为乘数 1. 固定乘积31在这用到了 2. 来自stackoverflow的回答 3. Hash值碰撞概率统计 3.1 读取单词字典表 3.2 Hash计算函数 3.3 Hash碰撞概率计算 3.4 单元测试 4. Hash值散列分布 4.1 哈希值分段存放 4.2 单元测试 4.2.1 乘数2散列 4.2.2 乘数31散列 4.2.3 乘数199散列 三.HashMap 数据结构与算…
最近收到一位粉丝的回馈! 这位粉丝已经成功入职阿里了小编很是羡慕啊! 今天就把这份30w字Java面试笔记给大家分享出来,说来也巧这份资料也是由一位阿里技术官整理出来的这算不算是"搬起石头砸自己的脚呢"哈哈! Java面试笔记 这份资料的内容非常全面而且细致入微,有Java入门,基础,字符串,进阶,项目,虚拟机,数据库,微服务,算法,并发,线程,集合,Linux,面试题等等Java相关技术点,希望你能凭借这份资料剑指offer! 内容总览: Java基础篇(45道面试题) 字符串&am…
最近,我在ImportNew网站上,看到了这篇文章,觉得总结的非常好,就默默的收藏起来了,觉得日后一定要好好整理学习一下,昨天突然发现在脉脉的行业头条中,居然也推送了这篇文章,更加坚定了我整理的信心.文中答案和详解部分过于详细的我会附上,本人认为写的 比较好的链接,供大家参考,如果有什么不正确的地方,还希望各位大神,在评论中给予指导,谢谢!J2SE基础 1. 九种基本数据类型的大小,以及他们的封装类?Java提供了一组基本数据类型,包括 boolean, byte, char, short, i…
谈谈HashCode与HashMap HashCode hashCode,即一个Object的散列码. HashCode的作用: 对于List.数组等集合而言,HashCode用途不大: 对于HashMap\HashTable\HashSet等集合而言,HashCode有很重要的价值. HashCode在上述HashMap等容器中主要是用于寻域,即寻找某个对象在集合中的区域位置,用于提升查询效率. 一个对象势必会存在多个属性字段,而选择什么属性来计算hashCode值,具有一定的考验.因为如果选…
package tt; import java.util.HashMap; import java.util.Map; public class a0 { public static void main(String[] args){ /** * 如果两个对象相同,那么这两个对象的hashCode一定要相同 String a1 ="abc" String a2 ="abc" 这a1和a2就是相同的对象 * * 两个对象的hashCode相同,并不一定表示两个对象就相…
hashCode及HashMap中的hash()函数   一.hashcode是什么 要理解hashcode首先要理解hash表这个概念 1. 哈希表 hash表也称散列表(Hash table),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的数组叫做散列表. 给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则…
前言 HashMap 源码和底层原理在现在面试中是必问的.因此,我们非常有必要搞清楚它的底层实现和思想,才能在面试中对答如流,跟面试官大战三百回合.文章较长,介绍了很多原理性的问题,希望对你有所帮助~ 目录 本篇文章主要包括以下内容: HashMap 的存储结构 常用变量说明,如加载因子等 HashMap 的四个构造函数 tableSizeFor()方法及作用 put()方法详解 hash()方法,以及避免哈希碰撞的原理 resize()扩容机制及原理 get()方法 为什么HashMap链表会…
本文首发于微信公众号:程序员乔戈里 乔哥:首先说说什么是Unicode.码点吧~要想搞懂,这些概念必须清楚 什么是Unicode? 下图来自http://www.unicode.org/standard/WhatIsUnicode.html中的截图 Unicode编码定义了这个世界上几乎所有字符(就是你眼睛看的字符比如ABC,汉字等)的数字表示,而且Unicode还兼容了很多老版本的编码规范,例如你熟悉的 ASCII码. 什么是码点? 我们国家的每一个人都对应唯一的一个身份证号,而Unicode…
类加载机制 虚拟机把描述类的数据从 Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制. 类的生命周期 加载(Loading)验证(Verification)准备(Preparation)解析(Resolution)初始化(Initialization)使用(Using)卸载(Unloading) 类加载的过程 类的加载过程包括了加载,验证,准备,解析,初始化类的加载主要分为以下三步: 1. 加载:根据路径找到对应的…
// 预计存入 1w 条数据,初始化赋值 10000,避免 resize. HashMap<String,String> map = new HashMap<>(10000) // for (int i = 0; i < 10000; i++) Java 集合的扩容 HashMap 算是我们最常用的集合之一,虽然对于 Android 开发者,Google 官方推荐了更省内存的 SparseArray 和 ArrayMap,但是 HashMap 依然是最常用的. 我们通过 Ha…