java基础(三)hashMap底层原理

简介: java基础(三)hashMap底层原理

HashMap底层原理

hashMap底层原理主要是jdk1.7和1.8以上的区别。

jdk1.7中底层是由数组(也有叫做“位桶”的)+链表实现;jdk1.8中底层是由数组+链表/红黑树实现。

参考学习:

https://blog.csdn.net/jswd_50x/article/details/86542240

HashMap面试题

1.谈一下HashMap的特性?

20200401134307494.png

2.谈一下HashMap的底层原理是什么?

20200401134307494.png

3.谈一下hashMap中put是如何实现的?

20200401134307494.png

4.谈一下hashMap中什么时候需要进行扩容,扩容resize()又是如何实现的?

20200401134307494.png

20200401134307494.png

5.谈一下hashMap中get是如何实现的?

20200401134307494.png

6.谈一下HashMap中hash函数是怎么实现的?还有哪些hash函数的实现方式?

20200401134307494.png

7.为什么不直接将key作为哈希值而是与高16位做异或运算?

20200401134307494.png

8.为什么是16?为什么必须是2的幂?如果输入值不是2的幂比如10会怎么样?

https://blog.csdn.net/sidihuo/article/details/78489820
https://blog.csdn.net/eaphyy/article/details/84386313

20200401134307494.png

9.谈一下当两个对象的hashCode相等时会怎么样?

20200401134307494.png

10.如果两个键的hashcode相同,你如何获取值对象?

20200401134307494.png

11."如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办?

20200401134307494.png

12.HashMap和HashTable的区别

20200401134307494.png

13.请解释一下HashMap的参数loadFactor,它的作用是什么?

20200401134307494.png

14.传统hashMap的缺点(为什么引入红黑树?):

20200401134307494.png

15. 平时在使用HashMap时一般使用什么类型的元素作为Key?

20200401134307494.png

16.JDK7和JDK8的区别

1.JDK8中链表会转为红黑树
2.新节点插入链表的顺序不同(JDK7是插入头结点,JDK8因为要遍历链表把链表变为红黑树所以采用插入尾节点)
3.hash算法简化。
4.resize的逻辑修改(JDK7会出现死循环,JDK8不会)
死锁场景:https://blog.csdn.net/qq_36071795/article/details/83655029
弄懂死锁:https://blog.csdn.net/weixin_34041003/article/details/87986378?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task


相关文章
|
20小时前
|
存储 安全 Java
Java一分钟之-Map接口与HashMap详解
【5月更文挑战第10天】Java集合框架中的`Map`接口用于存储唯一键值对,而`HashMap`是其快速实现,基于哈希表支持高效查找、添加和删除。本文介绍了`Map`的核心方法,如`put`、`get`和`remove`,以及`HashMap`的特性:快速访问、无序和非线程安全。讨论了键的唯一性、`equals()`和`hashCode()`的正确实现以及线程安全问题。通过示例展示了基本操作和自定义键的使用,强调理解这些概念对编写健壮代码的重要性。
9 0
|
20小时前
|
存储 安全 Java
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
|
20小时前
|
算法 安全 Java
深入探索Java中的并发编程:CAS机制的原理与应用
总之,CAS机制是一种用于并发编程的原子操作,它通过比较内存中的值和预期值来实现多线程下的数据同步和互斥,从而提供了高效的并发控制。它在Java中被广泛应用于实现线程安全的数据结构和算法。
22 0
|
20小时前
|
存储 监控 安全
JVM工作原理与实战(十六):运行时数据区-Java虚拟机栈
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了运行时数据区、Java虚拟机栈等内容。
12 0
|
20小时前
|
搜索推荐 Java Shell
8大Java排序方法(由简入繁),有代码详解和原理指导
8大Java排序方法(由简入繁),有代码详解和原理指导
33 0
|
20小时前
|
Java
Java为什么建议初始化HashMap的容量大小?
【5月更文挑战第3天】Java中初始化HashMap容量能提升性能。默认容量16,扩容按当前的1/2进行。预估元素数量设定合适容量可避免频繁扩容,减少性能损耗。过大浪费内存,过小频繁扩容,需权衡。Java 8后扩容策略调整,但核心仍是预估初始容量以优化性能。
40 1
|
20小时前
|
存储 安全 Java
【Java EE】CAS原理和实现以及JUC中常见的类的使用
【Java EE】CAS原理和实现以及JUC中常见的类的使用
|
20小时前
|
编解码 JavaScript 前端开发
【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例
【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。
|
20小时前
|
监控 搜索推荐 算法
Java排序:原理、实现与应用
【4月更文挑战第28天】本文探讨了Java中的排序算法,包括原理和实现。Java利用Comparator接口进行元素比较,通过Arrays和Collections类的sort方法对数组和列表进行排序。示例展示了使用这些方法的基本代码。此外,还讨论了冒泡排序算法和自定义排序场景,以适应不同需求。理解这些排序机制有助于提升程序效率。
13 1
|
20小时前
|
设计模式 消息中间件 Java
Java 设计模式:探索发布-订阅模式的原理与应用
【4月更文挑战第27天】发布-订阅模式是一种消息传递范式,被广泛用于构建松散耦合的系统。在 Java 中,这种模式允许多个对象监听和响应感兴趣的事件。
37 2