查看 HashSet的源码会发现,HashSet是由HashMap生成。
public HashSet() {
map = new HashMap<E,Object>();
}
当使用HashSet的add方法将对象添加到Set当中时,实际上是将该对象作为底层所维护的Map对象的key,而value则都是同一个Object对象(该对象我们用不上)。如下为源码。
private static final Object PRESENT = new Object();
public boolean add(E o) {
return map.put(o, PRESENT)==null;
}
HashMap底层维护一个数组,我们向HashMap中所放置的对象实际上是存储在该数组中;
在向HashMap中put一对键值时,它会根据key的hashcode值计算出一个位置,该位置就是此对象准备往数组中存放的位置。如果该位置没有对象存在,就将此对象直接放进数组中,如果该位置已经有对象存在了。则顺着此存在的对象链开始寻找(Entry类有一个Entry类型的next成员变量,指向了该对象的下一对象),如果此链上有对象,再去用equals方法进行比较,如果此链上的某个对象的equals方法比较为false,则将该对象放到数组中,然后将数组中该位置以前存在的那个对象链接到此对象后面,使用Entry对象的next变量来链。之所以要将新值放到数组中,则旧值放在链接中,是因为新值更有可能被访问。

分享到:
相关推荐
HashMap是一种基于哈希表的集合类,它的存储结构是一个数组,每个元素是一个单链表的头节点,链表用来解决hash地址冲突问题。HashMap有四个构造方法,其中初始容量和加载因子是影响性能的重要参数。加载因子是哈希表...
在Java编程语言中,ArrayList、LinkedList、HashMap和HashSet是四个非常重要的集合类,它们分别代表了不同类型的数据结构。这篇文章将深入探讨这些类的源码,以帮助我们更好地理解和运用它们。 首先,ArrayList是一...
本文主要探讨了几个关键的集合接口和实现类的底层源码,包括List、HashMap、HashSet等,以及它们的基本操作。 首先,Collection接口是所有单值集合的父接口,提供了增加、删除、遍历元素的基本方法。例如,`add()`...
之所以把HashSet和HashMap放在一起讲解,是因为二者在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也是说HashSet里面有一个HashMap(适配器模式)。因此本文将重点分析HashMap。 HashMap实现了Map...
在给定的压缩包文件中,包含了一些关键的集合类源码,如`TreeMap`、`Hashtable`、`ArrayList`、`HashMap`、`LinkedList`、`List`、`Map`、`TreeSet`、`LinkedHashMap`和`Set`。这些类都是Java集合框架的重要组成部分...
- 类与对象:Java是面向对象的语言,源码中会展示如何定义类,创建对象以及对象间的交互。 - 继承与多态:通过源码可以学习到类的继承结构,接口的使用,以及多态的概念和实现。 - 封装与抽象:源码中会有如何...
HashSet是Java编程语言中的一种集合类,它是一个不包含重复元素的集合,其内部实现基于HashMap。HashSet不保证元素的顺序,允许存储null元素,并且是非同步的,这意味着在多线程环境下,如果需要保证线程安全,需要...
Set接口在Java集合框架中扮演着重要角色,它是一个不包含重复元素的集合。Set接口继承自Collection接口,提供...了解和掌握这两种集合类的源码分析有助于深入理解Java集合框架的底层实现,从而更好地应用在实际开发中。
在Java编程语言中,HashSet和HashMap是两种非常重要的集合类,它们都位于`java.util`包下,分别用于存储不重复元素的集合和键值对的数据结构。本篇技术文档将深入剖析这两类数据结构的源码,帮助开发者理解其内部...
最后,对于源码部分,可能讲解了集合类的内部实现原理,例如`ArrayList`如何通过扩容机制保证添加元素,`HashMap`的冲突解决策略——开放寻址法或链地址法,以及`TreeSet`的红黑树平衡算法。 总的来说,这个示例...
Java集合类矩阵图是Java编程中非常重要的一个概念,它主要涵盖了Java集合框架中的各种接口、类以及它们之间的关系。这个矩阵图可以帮助开发者更清晰地理解Java集合框架的层次结构和实现方式。在这个矩阵图中,你可以...
HashMap是Java编程语言中最常用的集合类之一,尤其在面试中,HashMap的相关知识是考察候选人对数据结构和算法理解的重要部分。本套学习资料全面涵盖了HashMap的深入解析,旨在帮助求职者掌握大厂面试中的核心知识点...
HashSet作为Java集合框架中一个重要的非同步集合实现,它在JDK 7.0中的底层实现原理是基于HashMap来存储和操作数据的。下面就详细介绍HashSet的实现原理。 首先,HashSet是Set接口的一个实现类,它用于存储唯一性的...
2. **集合框架**:Java集合框架是处理对象集合的重要工具,包括List、Set、Map等接口及其实现类。源码可能涉及ArrayList、LinkedList、HashSet、HashMap等的使用,以及泛型、迭代器、流(Stream API)的实践。 3. *...
java所有集合类底层源码解析汇总,包括ArrayList、HashMap、HashSet、LinkedList、TreeMap、HashSet、ConcurrentHashMap等集合框架的底层实现源码大白话解读。
Java集合框架是Java编程语言中非常重要的组成部分,它为Java开发者提供了大量用于存储数据的结构。Java集合框架主要包括两大类,单列集合和双...了解这些集合类的内部实现和特性对于开发高性能的Java应用程序至关重要。
所有集合类都提供了迭代器接口,用于遍历集合中的元素。迭代器通过`hasNext()`检查是否有下一个元素,`next()`获取并移除下一个元素。`remove()`方法可以删除当前元素,这是安全的,因为其他线程无法同时修改迭代器...
Java集合类源码分析之Set详解 Java集合类中的Set Interface是用于存储无序、不可重复元素的集合接口。Set Interface继承自Collection Interface,提供了基本的集合操作,如add、remove、contains等。Set Interface...
《HashMap源码剖析》 HashMap是Java编程语言中一个非常重要的数据结构,它属于集合框架的一部分,提供了键值对(Key-Value)的存储方式。HashMap在内部使用了一个数组和链表来实现,实现了快速的查找、插入和删除...