关闭页面特效

Java HashMap详解

1|0前言


   HashMap作为一种高效的Map结构,已经成为了Java当中一门不可或缺的高效执行方式。

2|0继承关系


   HashMap继承了AbstractMap,实现了Map接口,Cloneable,Serailizable接口。

3|0基础属性


  • DEFAULT_INITIAL_CAPACITY=16
  • MAXIMUM_CAPACITY=1<<30
  • DEFAULT_LOAD_FACTOR=0.75
  • TREEIFY_THRESHOLD=8
  • UNTREEIFY_THRESHOLD=6
  • MIN_TREEIFY_CAPACITY=64

4|0Node


  Node类实现了Map.Entry接口,里面有Key,value,hash,next节点.内部拥有这些节点的get,set方法,setValue方法传入新值,返回 旧值。

  我的理解是这样的,Node其实只是链表节点而已,一个hashmap可能有多个链表节点,因为链表的Node其实是实现了Map.Entry接口,而这个接口其实是一个内部接口的实例,里面肯定也实现了接口的方法,不过很奇怪的是,这里面用到的只是单向链表,并没有前驱节点,它的后置节点是指向链表的下一个元素。其中比较重要的方法有equals方法,只要键和值相等,并且是 Map.Entry类型,那么就可以判断这两个节点是相等的;还有一个很重要的方法是hash方法。主要用到的算法就是首先获得对象的hashcode,然后把这个hashcode无符号右移16位,并且把右移前的结果和右移后的结果按位异或,得到的hash值就是最终的结果,具体算法原因不详。

  里面还有几个不是特别重要的方法,说不是 特别重要,其实也不是真的不重要,而是这些方法一般作为外部人员来说,很少去使用。其中一个是comapreableClassFor方法,它带一个参数,从外部 传入,如果这个参数的实例实现了Comparable接口,首先判断这个是不是String类型,如果是String类型,那么直接返回 ;首先会获取带泛型的接口,如果有一个或者多个泛型接口,那么循环去便利这个数组,如果实际类型是Comparable.class,然后判断参数的实际类型,如果类型是Comparable.class,并且只有一参数,那么 返回它本身。

  里面还有一个tableSizeFor方法,参数是初始的容量,代码逻辑就是无符号的右移,每行右移的倍数就是前一次的2倍,最后右移到的是2的16次方,其中参数是初始大小 。只要 在1和MAX_CAPACITY之间就行了。

   


__EOF__

作  者ღKawaii
出  处https://www.cnblogs.com/kmsfan/p/7617868.html
关于博主:一个普通的小码农,为了梦想奋斗
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!

posted @   yangliwen  阅读(492)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
历史上的今天:
2016-10-01 .NET CoreCLR开发人员指南(上)
0
0
关注
跳至底部
document.getElementById("homeTopTitle").innerText="ღKawaii";
点击右上角即可分享
微信分享提示