java学会这些,我就入门啦!(基础篇六)HashMap、Hashtable、ConcurrentHashMap的原理与区别

简介: java学会这些,我就入门啦!(基础篇六)HashMap、Hashtable、ConcurrentHashMap的原理与区别

HashMap、Hashtable、ConcurrentHashMap的原理与区别


       这个是一般是面试必备的题目,这里放在基础讲是因为这个东西确实不难,但是衍生出来能问的东西确实多。话不多说,我们下面就来讲一讲。


我们先进行Hashtable与HashMap的比对:


Hashtable与HashMap,他们之间的最大的区别在与Hashtable是线程安全的,而HashMap不是线程安全的,Hashtable是在java开始发布时就提供的键值映射的数据结构,而HashMap产生于JDK1.2。现在Hashtable基本已经失去了使用常见,究其原因第一可能是因为效率慢,但还有很大一部分原因估计是因为没有遵循驼峰命名。说实话,我这个强迫症看着他就非常难受!其他还有一些不同就是他们的父类也不一样,HashMap是继承自AbstractMap类,而Hashtable继承自Dictionary类,还有就是Hashtable无论是key还是value都不能为null,实现线程安全的时候是锁住整个Hashtable,效率超级低。果然,没人用的东西必然有不可取之处。


我们再来看看ConcurrentHashMap:


hashMap与ConcurrentHashMap,他们之间的区别其实跟hashtable与hashMap的区别差不多,也是ConcurrentHashMap是线程安全的,但是hashtable是使用的是synchronized关键字,而ConcurrentHashMap使用的是分段锁技术,他融合了hashMap与synchronized的优点,ConcurrentHashMap默认将hash表分为16个区间,正常的操作只需要使用到当前的区间,这样看来,原来只能一个线程进入的,现在却能16个线程同时进入,读线程几乎不受任何影响,写入才会锁定,性能的提升简直不可同日而语。


面试官问你hashMap的原理的时候怎么办?


这里我帮你们整理了一段话术,hashMap是一个数组加链表的结构,它本身是一个特殊的数组结构,初始长度为16,加载因子是0.75,也就是每当存储的长度到达当前最大长度的0.75时就会扩容。他是put方法是根据键值对的键hash一下算出他的hash值,根据hash值计算出要添加的键值对放到哪个位置。当格子里面已经存在元素的时候,就把新的键值对放到已经存在格子的链表中。反之,get方法也差不多,先根据键获得hash值,根据hash值知道元素放在哪个格子里面,进入格子中,对格子里的元素的键进行逐个比对,比对完成后,取出对应的值就好了。


6cce5e1abd5475f473d0a254dc43cb3b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

关注我!你会更强!


相关文章
|
4月前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
391 0
|
5月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
481 0
|
6月前
|
安全 Java 数据库连接
2025 年最新 Java 学习路线图含实操指南助你高效入门 Java 编程掌握核心技能
2025年最新Java学习路线图,涵盖基础环境搭建、核心特性(如密封类、虚拟线程)、模块化开发、响应式编程、主流框架(Spring Boot 3、Spring Security 6)、数据库操作(JPA + Hibernate 6)及微服务实战,助你掌握企业级开发技能。
850 3
|
5月前
|
前端开发 Java 数据库连接
帮助新手快速上手的 JAVA 学习路线最详细版涵盖从入门到进阶的 JAVA 学习路线
本Java学习路线涵盖从基础语法、面向对象、异常处理到高级框架、微服务、JVM调优等内容,适合新手入门到进阶,助力掌握企业级开发技能,快速成为合格Java开发者。
711 3
|
6月前
|
NoSQL Java 关系型数据库
Java 从入门到进阶完整学习路线图规划与实战开发最佳实践指南
本文为Java开发者提供从入门到进阶的完整学习路线图,涵盖基础语法、面向对象、数据结构与算法、并发编程、JVM调优、主流框架(如Spring Boot)、数据库操作(MySQL、Redis)、微服务架构及云原生开发等内容,并结合实战案例与最佳实践,助力高效掌握Java核心技术。
615 1
|
6月前
|
Java 测试技术 API
Java IO流(二):文件操作与NIO入门
本文详解Java NIO与传统IO的区别与优势,涵盖Path、Files类、Channel、Buffer、Selector等核心概念,深入讲解文件操作、目录遍历、NIO实战及性能优化技巧,适合处理大文件与高并发场景,助力高效IO编程与面试准备。
|
6月前
|
Java 编译器 API
Java Lambda表达式与函数式编程入门
Lambda表达式是Java 8引入的重要特性,简化了函数式编程的实现方式。它通过简洁的语法替代传统的匿名内部类,使代码更清晰、易读。本文深入讲解Lambda表达式的基本语法、函数式接口、方法引用等核心概念,并结合集合操作、线程处理、事件回调等实战案例,帮助开发者掌握现代Java编程技巧。同时,还解析了面试中高频出现的相关问题,助你深入理解其原理与应用场景。
|
5月前
|
Java API 数据库
2025 年最新 Java 实操学习路线,从入门到高级应用详细指南
2025年Java最新实操学习路线,涵盖从环境搭建到微服务、容器化部署的全流程实战内容,助你掌握Java 21核心特性、Spring Boot 3.2开发、云原生与微服务架构,提升企业级项目开发能力,适合从入门到高级应用的学习需求。
1648 0
|
5月前
|
监控 Java API
2025 年全新出炉的 Java 学习路线:从入门起步到实操精通的详细指南
2025年Java学习路线与实操指南,涵盖Java 21核心特性、虚拟线程、Spring Boot 3、微服务、Spring Security、容器化部署等前沿技术,助你从入门到企业级开发进阶。
1061 0
|
6月前
|
算法 Java 测试技术
零基础学 Java: 从语法入门到企业级项目实战的详细学习路线解析
本文为零基础学习者提供完整的Java学习路线,涵盖语法基础、面向对象编程、数据结构与算法、多线程、JVM原理、Spring框架、Spring Boot及项目实战,助你从入门到进阶,系统掌握Java编程技能,提升实战开发能力。
368 0