HashSet,给我们最直观的感受就是两点,不可重复和无序,底层采用了hash存储结构。
其底层是采用了HashMap,今天我们通过深入源码的方式来了解其背后的原理。
我们关注的点有几个
1,所谓的hash表是一个怎么样的结构?
hash表底层结构是一个数组,且数组的元素是一个链表结构。给大家画个图
2,是如何保证唯一的?存放进去的细节如何?
首先,在hashSet的底层源代码中,我们发现,它采用的HashMap来存储的,所以我们的分析重点就是转移到HashMap的分析上
HashMap的put方法如何实现的?接下来,我们继续跟踪源码
关键的hash(key),即根据key得到关键的hash值,我们看看方法是怎么写的?
通过观察源代码,我们得到一个信息,当这个key不为null时,则结果值为多少,关键在于hashCode()方法。
继续回到putValue方法的源码跟踪
整体来说,就是先通过一定的算法,其中算法的关键部分是hashCode方法,得到一个hash值,再通过hash值判断数组中是否存在该元素,如果不存在,则创建节点元素存放数组;如果存在,则添加。最后,判断当前容量是否超过阈值,超过则进行扩容。
3,hashCode()方法可以返回一个固定的整数吗?
答案是不可以,如果这个值返回一个固定值,可以想象得到,hashSet的原先的性能优势将荡然无存,所有的数据会集中到一个位置上,形成一个长链表。
--------------------- 本文来自 互联网十年老兵- 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/happy_coding_life/article/details/80381233?utm_source=copy
相关推荐
通过源码分析, HashSet的实现原理可以分为以下几个方面: 1. HashSet的构造函数:HashSet的构造函数中,会创建一个HashMap对象,用于存储集合元素。`public HashSet() { map = new HashMap();}` 2. HashSet的add...
Java面试题-基础+集合原理 本资源主要涵盖Java面试题的基础知识和集合原理,涵盖Object-Oriented Programming(OOP)相关知识点,包括多态(Polymorphism)、方法Overload和Override、等于运算符(==)和equals()...
- **垃圾回收**:了解GC的工作原理,理解新生代、老年代的划分。 - **性能优化**:理解JVM调优的基本策略,如-Xms、-Xmx等参数设置。 9. **Spring框架** - **依赖注入**:理解IoC容器和DI(依赖注入)的概念。 ...
"java面试题-200题"这个资料包显然是一个集中的资源,帮助求职者准备Java工程师的面试。 首先,面试通常会涵盖以下几个核心方面: 1. **基础知识**:这部分可能包括Java语言的基本语法、数据类型、控制结构(如if-...
3. **集合框架**:对ArrayList、LinkedList、HashSet、HashMap等集合类的深入理解,包括它们的工作原理、性能特点和适用场景。同时,了解Collection和Iterable接口,以及Stream API的使用。 4. **多线程**:理解...
Java 程序员必备面试题-V1版.pdf 本资源是一个 Java 面试题集,涵盖了 Java 基础、集合、并发、MySQL、Kafka 等高频知识点。下面是对标题和描述中所说的知识点的详细说明: 动态代理 在 Java 中,动态代理可以...
以下是一些重要的Java基础知识,它们通常会出现在面试题中,同时也是开发者日常工作中必备的知识。 1. **Java语言核心特性** - **数据类型**:Java分为基本数据类型和引用数据类型。基本类型包括整型(byte, short...
Java私塾面试题----JAVA代码与编程3涵盖了Java编程中的核心知识点,这些是面试官在评估候选人技术能力时经常会问到的问题。以下是一些关键的知识点解析: 1. **基本语法**:Java是一种强类型、面向对象的语言,面试...
Java面试题是每个Java开发者在求职过程中必须面对的挑战,这些题目涵盖了广泛的Java知识领域,包括基础语法、面向对象编程、集合框架、多线程、异常处理、内存管理、JVM、网络编程、设计模式等。下面将针对这些重要...
Java私塾面试题集合——JAVA基础1.pdf 这个压缩包文件包含了针对Java初学者和求职者的一系列面试题目,主要涵盖了Java基础知识。这些题目旨在检验和提升候选人在Java编程语言的理解、基本概念、语法和常见问题解决...
Java作为一门广泛使用的编程语言,其面试题涵盖了众多的知识领域,包括基础语法、面向对象、集合框架、多线程、异常处理、IO流、网络编程、JVM内存模型、设计模式、Spring框架、数据库操作等。以下是根据提供的...
对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,查看 HashSet 的源代码,可以看到如下代码:
以下是对这些常见面试题的详细解释: 1. **List、Map、Set 的特点**: - **List**:有序列表,允许重复元素,如 ArrayList 和 LinkedList。 - **Set**:无序集合,不允许重复元素,如 HashSet 和 TreeSet。 - **...
这份"java面试题-外企软件工程师面试题大全"包含了丰富的面试题目,旨在帮助求职者更好地准备Java相关的技术面试。 一、基础概念与语法 1. 讲解Java的三大特性:封装、继承、多态,以及它们在实际编程中的应用。 2....
以下是一些常见的Java面试题,涵盖基础知识、进阶概念以及实战应用。 1. **基础语法与特性** - 介绍Java的内存管理机制,包括栈内存和堆内存的区别。 - 讲解Java的封装、继承和多态三大特性及其应用场景。 - ...
Java面试是评估程序员技能的重要环节,对于求职者来说,熟悉并理解常见的Java面试题是至关重要的。本资源“Java面试题大全--new”显然包含了大量关于Java编程语言的面试问题和答案,旨在帮助求职者准备Java相关的...
以上总结了Java集合的基础概念、特点、分类及其具体实现方式,这对于理解Java集合框架的基本原理及其在实际开发中的应用至关重要。希望这些知识点能帮助你在面试中更好地应对关于Java集合的问题。