当前位置: > 财经>正文

为什么要用HashMap?这样回答面试官直呼内行手撕HashMap系列 外汇再保险是对外汇财产吗为什么不能用现金

2023-08-29 12:25:14 互联网 未知 财经

为什么要用HashMap?这样回答面试官直呼内行手撕HashMap系列

少说话多办事,我们直接进入正题!

文章目录 一. 为什么用HashMap?二. HashMap 的工作原理是什么?三. 有什么方法可以减少碰撞?四. HashMap 中 hash 函数怎么是实现的?五. 拉链法导致的链表过深,为什么不用二叉查找树代替而选择红黑树?为什么不一直使用红黑树?六. 说说你对红黑树的见解?七. 解决 hash 碰撞还有那些办法?八. 如果 HashMap 的大小超过了负载因子(load factor)定义的容量怎么办?九. 重新调整 HashMap 大小存在什么问题吗?十. HashTable十一. HashMap 与 HashTable 区别十二. 可以使用 CocurrentHashMap 来代替 Hashtable 吗?十三. CocurrentHashMap(JDK 1.7)十四. CocurrentHashMap(JDK 1.8)

一. 为什么用HashMap? HashMap 是一个散列桶(数组和链表、红黑树),它存储的内容是键值对 key-value 映射HashMap 采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻址修改HashMap 是非 synchronized,所以 HashMap 很快HashMap 可以接受 null 键和值,而 Hashtable 则不能(原因就是 equlas() 方法需要对象,因为 HashMap 是后出的 API 经过处理才可以) 二. HashMap 的工作原理是什么?

HashMap 是基于 hashing 的原理

我们使用 put(key, value) 存储对象到 HashMap 中,使用 get(key) 从 HashMap 中获取对象。当我们给 put() 方法传递键和值时,我们先对键调用 hashCode() 方法,计算并返回的 hashCode 是用于找到 Map 数组的 bucket 位置来储存 Node 对象。

这里关键点在于指出,HashMap 是在 bucket 中储存键对象和值对象,作为Map.Node 。

以下是 HashMap 初始化

简化的模拟数据结构:

Node[] table = new Node[16]; // 散列桶初始化,tableclass Node {hash; //hash值key; //键value; //值node next; //用于指向链表的下一层(产生冲突,用拉链法)

以下是具体的 put 过程(JDK1.8)

对 Key 求 Hash 值,然后再计算下标如果没有碰撞,直接放入桶中(碰撞的意思是计算得到的 Hash 值相同,需要放到同一个 bucket 中)如果碰撞了,以链表的方式

版权声明: 本站仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请发送邮件至 举报,一经查实,本站将立刻删除。