`

每天一道面试题-从源码探究HashSet的工作原理

 
阅读更多

HashSet,给我们最直观的感受就是两点,不可重复和无序,底层采用了hash存储结构。

其底层是采用了HashMap,今天我们通过深入源码的方式来了解其背后的原理。

我们关注的点有几个

1,所谓的hash表是一个怎么样的结构?

hash表底层结构是一个数组,且数组的元素是一个链表结构。给大家画个图

每天一道面试题-从源码探究HashSet的工作原理

2,是如何保证唯一的?存放进去的细节如何?

首先,在hashSet的底层源代码中,我们发现,它采用的HashMap来存储的,所以我们的分析重点就是转移到HashMap的分析上

每天一道面试题-从源码探究HashSet的工作原理

HashMap的put方法如何实现的?接下来,我们继续跟踪源码

每天一道面试题-从源码探究HashSet的工作原理

关键的hash(key),即根据key得到关键的hash值,我们看看方法是怎么写的?

通过观察源代码,我们得到一个信息,当这个key不为null时,则结果值为多少,关键在于hashCode()方法。

每天一道面试题-从源码探究HashSet的工作原理

继续回到putValue方法的源码跟踪

每天一道面试题-从源码探究HashSet的工作原理

每天一道面试题-从源码探究HashSet的工作原理

整体来说,就是先通过一定的算法,其中算法的关键部分是hashCode方法,得到一个hash值,再通过hash值判断数组中是否存在该元素,如果不存在,则创建节点元素存放数组;如果存在,则添加。最后,判断当前容量是否超过阈值,超过则进行扩容。

3,hashCode()方法可以返回一个固定的整数吗?

答案是不可以,如果这个值返回一个固定值,可以想象得到,hashSet的原先的性能优势将荡然无存,所有的数据会集中到一个位置上,形成一个长链表。

每天一道面试题-从源码探究HashSet的工作原理

--------------------- 本文来自 互联网十年老兵- 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/happy_coding_life/article/details/80381233?utm_source=copy 

分享到:
评论

相关推荐

    Java面试题 从源码角度分析HashSet实现原理

    通过源码分析, HashSet的实现原理可以分为以下几个方面: 1. HashSet的构造函数:HashSet的构造函数中,会创建一个HashMap对象,用于存储集合元素。`public HashSet() { map = new HashMap();}` 2. HashSet的add...

    Java面试题-基础+集合原理.pdf

    Java面试题-基础+集合原理 本资源主要涵盖Java面试题的基础知识和集合原理,涵盖Object-Oriented Programming(OOP)相关知识点,包括多态(Polymorphism)、方法Overload和Override、等于运算符(==)和equals()...

    java面试题-应届生面试题-面试大全

    - **垃圾回收**:了解GC的工作原理,理解新生代、老年代的划分。 - **性能优化**:理解JVM调优的基本策略,如-Xms、-Xmx等参数设置。 9. **Spring框架** - **依赖注入**:理解IoC容器和DI(依赖注入)的概念。 ...

    java面试题-200题

    "java面试题-200题"这个资料包显然是一个集中的资源,帮助求职者准备Java工程师的面试。 首先,面试通常会涵盖以下几个核心方面: 1. **基础知识**:这部分可能包括Java语言的基本语法、数据类型、控制结构(如if-...

    java面试题-外企软件工程师面试题大全

    3. **集合框架**:对ArrayList、LinkedList、HashSet、HashMap等集合类的深入理解,包括它们的工作原理、性能特点和适用场景。同时,了解Collection和Iterable接口,以及Stream API的使用。 4. **多线程**:理解...

    1000道Java 程序员必备面试题-V1版.pdf

    Java 程序员必备面试题-V1版.pdf 本资源是一个 Java 面试题集,涵盖了 Java 基础、集合、并发、MySQL、Kafka 等高频知识点。下面是对标题和描述中所说的知识点的详细说明: 动态代理 在 Java 中,动态代理可以...

    JAVA面试题-基础部分3

    以下是一些重要的Java基础知识,它们通常会出现在面试题中,同时也是开发者日常工作中必备的知识。 1. **Java语言核心特性** - **数据类型**:Java分为基本数据类型和引用数据类型。基本类型包括整型(byte, short...

    java私塾面试题----JAVA代码与编程3

    Java私塾面试题----JAVA代码与编程3涵盖了Java编程中的核心知识点,这些是面试官在评估候选人技术能力时经常会问到的问题。以下是一些关键的知识点解析: 1. **基本语法**:Java是一种强类型、面向对象的语言,面试...

    java面试题--java面试题

    Java面试题是每个Java开发者在求职过程中必须面对的挑战,这些题目涵盖了广泛的Java知识领域,包括基础语法、面向对象编程、集合框架、多线程、异常处理、内存管理、JVM、网络编程、设计模式等。下面将针对这些重要...

    java私塾面试题----JAVA基础1.rar

    Java私塾面试题集合——JAVA基础1.pdf 这个压缩包文件包含了针对Java初学者和求职者的一系列面试题目,主要涵盖了Java基础知识。这些题目旨在检验和提升候选人在Java编程语言的理解、基本概念、语法和常见问题解决...

    java面试题---传智博客和其他

    Java作为一门广泛使用的编程语言,其面试题涵盖了众多的知识领域,包括基础语法、面向对象、集合框架、多线程、异常处理、IO流、网络编程、JVM内存模型、设计模式、Spring框架、数据库操作等。以下是根据提供的...

    HashSet工作原理_动力节点Java学院整理

    对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,查看 HashSet 的源代码,可以看到如下代码:

    JAVA面试题-应对各种面试考题集锦

    以下是对这些常见面试题的详细解释: 1. **List、Map、Set 的特点**: - **List**:有序列表,允许重复元素,如 ArrayList 和 LinkedList。 - **Set**:无序集合,不允许重复元素,如 HashSet 和 TreeSet。 - **...

    java面试题-外企软件工程师面试题大全.rar

    这份"java面试题-外企软件工程师面试题大全"包含了丰富的面试题目,旨在帮助求职者更好地准备Java相关的技术面试。 一、基础概念与语法 1. 讲解Java的三大特性:封装、继承、多态,以及它们在实际编程中的应用。 2....

    JAVA的面试题-汇总!!!

    以下是一些常见的Java面试题,涵盖基础知识、进阶概念以及实战应用。 1. **基础语法与特性** - 介绍Java的内存管理机制,包括栈内存和堆内存的区别。 - 讲解Java的封装、继承和多态三大特性及其应用场景。 - ...

    Java面试题大全--new

    Java面试是评估程序员技能的重要环节,对于求职者来说,熟悉并理解常见的Java面试题是至关重要的。本资源“Java面试题大全--new”显然包含了大量关于Java编程语言的面试问题和答案,旨在帮助求职者准备Java相关的...

    2024年java面试题-java集合相关面试题

    以上总结了Java集合的基础概念、特点、分类及其具体实现方式,这对于理解Java集合框架的基本原理及其在实际开发中的应用至关重要。希望这些知识点能帮助你在面试中更好地应对关于Java集合的问题。

Global site tag (gtag.js) - Google Analytics