首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏电光石火

    HashSet

    HashSet类,是存在于java.util包中的类。 Object clone() 返回此 HashSet 实例的浅表副本:并没有复制这些元素本身。 boolean contains(Object o) 如果此 set 包含指定元素,则返回 true。 , containsAll, equals, hashCode, removeAll, retainAll, toArray, toArray 附上数组查重例子 import java.util.HashSet ; public class ttt{ public static boolean isRepeat(Integer[] a){ HashSet test = new HashSet<Integer

    57350发布于 2018-01-18
  • 来自专栏宇宙之_一粟

    Hashset

    HashSet类可用来存储对象集。就像ArrayList一样,HashSet类也实现了Collection接口。 但是,HashSet存储的是多个项构成的集合而不是列表,这意味着其中不包含任何重复的元素,这与ArrayList可以包含许多重复元素不同。 这个类被命名为HashSet是因为用来实现这种集合的算法称为哈希表。有关哈希表算法如何工作的描述

    45020发布于 2020-11-24
  • 来自专栏国产程序员

    HashSet

    HashSet 是一个不允许存储重复元素的集合,它的实现比较简单,只要理解了 HashMap,HashSet 就水到渠成了。 成员变量 首先了解下 HashSet 的成员变量: private transient HashMap<E,Object> map; // Dummy value to associate 构造函数 public HashSet() { map = new HashMap<>(); } public HashSet(int initialCapacity 由于 HashMap 的 key 是不能重复的,所以每当有重复的值写入到 HashSet 时,value 会被覆盖,但 key 不会受到影响,这样就保证了 HashSet 中只能存放不重复的元素。 总结 HashSet 的原理比较简单,几乎全部借助于 HashMap 来实现的。 所以 HashMap 会出现的问题 HashSet 依然不能避免。

    55020发布于 2019-07-03
  • 来自专栏Java

    HashSet

    集合(Set) HashSet 简介:本文旨在用最简洁的篇幅,快速熟悉使用HashMap。 声明方式 public static void main(String[] args) { // 方式一 子类实现方式创建 Set<Integer> set = new HashSet<Integer ; System.out.println(set); // 这个结果无序 且去重 /*[1, 2, 3, -100, 4, 100]*/ // 方式二 同一等级类的方式创建 HashSet <Integer> set = new HashSet<Integer>(); set.add(1); set.add(3); set.add(1); set.add(2); set.add (set); /*[1, 2, 3, 4]*/ // 克隆的时候要注意 就是需要 加上对应的强制转换 HashSet<Integer> set2 = (HashSet<Integer>

    25710编辑于 2025-01-21
  • 来自专栏电光石火

    HashSet

    HashSet类,是存在于java.util包中的类。同时也被称为集合,该容器中只能存储不重复的对象 方法摘要 boolean add(E e) 如果此 set 中尚未包含指定元素,则添加指定元素。 Object clone() 返回此 HashSet 实例的浅表副本:并没有复制这些元素本身。 boolean contains(Object o) 如果此 set 包含指定元素,则返回 true。 addAll, containsAll, equals, hashCode, removeAll, retainAll, toArray, toArray 附上数组查重例子 import java.util.HashSet ; public class ttt{ public static boolean isRepeat(Integer[] a){ HashSet test = new HashSet<Integer

    50030发布于 2019-12-06
  • 来自专栏WD学习记录

    Java HashSet

    HashSet继承自AbstractSet,实现了Set接口、Cloneable、Serializable接口。 构造函数 public HashSet() { map = new HashMap<>(); } public HashSet(Collection<? map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16)); addAll(c); } public HashSet initialCapacity, float loadFactor) { map = new HashMap<>(initialCapacity, loadFactor); } public HashSet (int initialCapacity) { map = new HashMap<>(initialCapacity); } HashSet(int initialCapacity

    45120发布于 2019-05-07
  • 来自专栏程序猿的大杂烩

    HashSet集合

    HashSet集合: hashSet集合是把存储进来的对象先计算出对象的hash值后才进行对应的存储,因为存储进来的对象都有一个hash值,所以在进行查询的时候不需要像其他集合一样,一个个去查询来得到所需要的对象 hashSet集合只需要把要查询的对象计算出hash值后查找存储区域里hash值一样的对象,然后拿出来即可。这样检索速度就会相当快,这也是hashSet集合的优点。 在hashSet集合里如果存储对象时出现两个或多个相同的hash值,则会以单链的形式挂在同一个hash值下,所以数组的长度越长检索的速度越快,因为数据分开的比较散不会挤在一起。 HashSet集合与数组集合检索速度对比: 数组集合检索: ? HashSet集合检索: ? 速度对比: ? 运行结果: ? 从以上实验可以看得出速度相差的不是一点点。 单链引用示意图: ? HashSet集合添加方法: 代码示例: ? ?

    83720发布于 2020-09-23
  • 来自专栏Java 源码分析

    HashSet 源码分析

    HashSet 源码分析 1. 其他的四个方法其实都没什么好说的,全是调用了 HashMap 的构造,然后默认大小还是 16. public HashSet() { map = new HashMap<>(); } public HashSet(Collection<? initialCapacity, float loadFactor) { map = new HashMap<>(initialCapacity, loadFactor); } public HashSet 底层采用 LinkedHashMap HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap

    78740发布于 2018-04-11
  • 来自专栏Android开发经验分享

    HashSet源码解析

    转载请以链接形式标明出处: 本文出自:103style的博客 base on jdk_1.8.0_77 ---- 目录 HashSet的全局变量 HashSet的构造方法 HashSet的数据操作方法 小结 ---- HashSet的全局变量 private transient HashMap<E,Object> map; 维护了一个HashMap。 HashSet的构造方法 即调用了HashMap的各种初始化方法。 public HashSet() { map = new HashMap<>(); } public HashSet(Collection<? 可以发现HashSet的数据操作都是通过构建的全局变量HashMap完成的。

    32850编辑于 2022-12-19
  • 来自专栏用户1880875的专栏

    HashSet的秘密

    这篇文章我们先轻松一下,不讲HashMap,来说说HashSet。如果有点Java基础的童鞋,应该都知道List和Set都实现自Collection,List保证元素的添加顺序,元素可重复。 有两个很重要的实现HashSet和TreeSet。其中黄色部分前面已经说过了是要重点了解的,老规矩,上代码,大家可以先想一想以下代码的执行结果。 public static void main(String[] args){ Set<String> strSet = new HashSet<>();//new了一个HashSet strSet.add ; System.out.println("strSet里是否为空 : " + strSet.isEmpty()); } 先来看第一行代码: Set<String> strSet = new HashSet <>();//new了一个HashSet new了一个HashSet,前面的文章已经说过很多次了,只要是看到new,这货肯定在堆内存里开辟了一块空间,先找到HashSet的构造函数看看,看到如下代码:

    44730发布于 2021-07-27
  • 来自专栏一直在努力的Java菜鸡er

    HashSet源码学习

    HashSet源码学习 UML图(没实现SortedSet,无序的) 属性 static final long serialVersionUID = -5024744406713321676L; /* private static final Object PRESENT = new Object(); 构造方法 /* 底层都是围绕HashMap展开的,负载因子,初始容量等 */ public HashSet () { map = new HashMap<>(); } public HashSet(Collection<? = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16)); addAll(c); } public HashSet float loadFactor) { map = new HashMap<>(initialCapacity, loadFactor); } public HashSet

    38450编辑于 2022-09-08
  • 来自专栏haifeiWu与他朋友们的专栏

    聊聊HashSet源码

    今天聊一下HashSet源码,HashSet内部基本使用HashMap来实现,本博客将通过一下几个方向讲解。 HashSet的UML图 ? HashSet简介 HashSet数据结构 HashSet内部使用HashMap来实现,HashMap的key为要存储的元素,value为一个Object,大致数据结构如下: public class 聊聊HashSet与HashMap的关系 从上面的源码可以看出来,HashSet与HashMap的关系不可谓不密切,以至于不敢相信上面的UML是对的。 因此,对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet源码的实现比较简单,相关HashSet的操作,都是直接调用底层HashMap 特性小结 从源码来看,HashSet无非是一个阉割版的HashMap,所以要想明白HashSet的实现原理,HashMap源码坑还是要跳的。

    61130发布于 2018-09-11
  • 来自专栏陶士涵的菜地

    集合框架(HashSet

    system.out.println(demo),打印demo对象,Demo@xxxxxx Demo对象在内存中是按照哈希值存储在哈希表中,取出也是按照哈希值,所以是无序的 import java.util.HashSet Demo demo2=new Demo(); System.out.println(demo1); System.out.println(demo2); HashSet set=new HashSet(); set.add(demo1); set.add(demo2); System.out.println(set); 打印对象显示,Demo@3c 获取多个对象,哈希值都是一样的,此时存入HaseSet中,使用equals()方法,判断是否是同一个对象,如果不是同一个对象,会顺延存储 import java.util.HashSet set=new HashSet(); set.add(demo1); set.add(demo2); System.out.println(set);

    55230发布于 2019-09-10
  • 来自专栏技术分享

    HashSet源码剖析

    hashSet底层hashMap 而hashMap的底层其实是数组 + 链表 + 红黑树 //源码,hashSet的构造器 public HashSet() { map = new HashMap <>(); } public HashSet(Collection<? (int initialCapacity) { map = new HashMap<>(initialCapacity); } HashSet(int initialCapacity, float 影响hashSet的性能 影响HashMap的性能: 初始容量(inital capacity)和负载系数(load factor)。 所以,如果要将自定义的对象放入到HashMap或HashSet中,需要**@Override** hashCode()和equals()方法。

    32810编辑于 2024-05-30
  • 来自专栏Java程序员那些事

    HashSet底层分析

    对于HashSet而言,它是基于HashMap实现的。HashSet底层采用HashMap来保存元素,因此HashSet底层其实比较简单。 中 addAll(c); } // 指定HashSet初始容量和加载因子的构造函数 public HashSet(int initialCapacity, float ,并返回Object对象 public Object clone() { try { HashSet<E> newSet = (HashSet<E>) super.clone HashSet的绝大部分方法都是通过调用HashMap的方法来实现的,因此HashSet和HashMap两个集合在实现本质上是相同的。 所以两个Name类的hash值并不相同,因此HashSet会把其当成两个对象来处理。 所以,当我们要将一个类作为HashMap的key或者存储在HashSet的时候。

    67010发布于 2019-09-17
  • 来自专栏吉林乌拉

    HashSet源码解析

    今天我们分析一下HashSet的底层实现,因为HashSet底层是通过HashMap实现的。 所以HashSet底层也是通过哈希表的数据结构存储的。 下面我们将和其它集合一样,从HashSet的初始化方面着手,来分析一下HashSet的底层实现。 初始化 ? 我们看到,在HashSet中的无参构造方法中,直接创建了一个HashMap对象。 总结 分析到这里使我们知道HashSet有以下几点特性,它们分别是: 在HashSet中是不能保证元素的添加顺序与遍历顺序是一致的。因为底层是通过HashMap中的key的值保存的。 因为HashSet底层是通过HashMap中的key的值保存的,所以在HashSet中是不能保存重复元素的。因为在HashMap中的key也是不能重复的。 因为HashMap不是线程安全的集合类,并且我们分析HashSet源码时,也没有发现HashSet添加额外的同步关键字synchronized,所以说明HashSet也不是线程安全的集合类。

    56320发布于 2019-08-14
  • 来自专栏宇宙之_一粟

    HashMap和HashSet

    就像HashSet一样,这个类称为HashMap是因为它也使用了哈希表算法。它可以用作小型数据库,当给定键对象时,能够快速地获取值对象。 HashSet类可用来存储对象集。 就像ArrayList一样,HashSet类也实现了Collection接口。 但是,HashSet存储的是多个项构成的集合而不是列表,这意味着其中不包含任何重复的元素,这与ArrayList可以包含许多重复元素不同。

    46621发布于 2020-10-26
  • HashMap 和 HashSet

    认识 HashMap 和 HashSet HashMap官方文档 HashSet官方文档 HashMap 和 HashSet 是Java中利用哈希表实现的 Map 和 Set。 由于哈希表的 插入/查找/删除 操作的时间复杂度均为 O(1),因此 HashMap 和 HashSet 相关操作的时间复杂度也是 O(1)。 HashMap 构造方法 1. 以下是具体操作图示: HashSet 和 TreeSet 底层是 TreeMap 一样,HashSet 的底层也是 HashSet。 它的四个构造方法都是通过 HashMap 来实现的。 1. 自定义类型需要覆写equals方法和hashCode方法 Key必须是可比较的,否则会抛出ClassCastException异常 使用场景 不关心Key是否有序,只关心时间性能 需要Key有序 HashSet 和 TreeSet 的区别 Map HashSet TreeSet 底层结构 哈希桶 红黑树 插入/查找/删除的时间复杂度 O(1) O(log₂N) 插入/查找/删除的区别 通过哈希函数计算哈希地址

    20210编辑于 2025-12-16
  • 来自专栏学习内容

    手写代码:HashSet

    2、底层实现: HashSet是采用哈希算法实现,底层实际是用HashMap实现的(HashSet本质就是一个简化版的(HashMap),因此,查询效率和增删效率都比较高; 查看底层代码,我们发现里面有个 map属性,这就是HashSet的核心秘密。

    29110编辑于 2023-08-09
  • 来自专栏Java技术编程

    HashSet 源码分析

    来存放我们的ID,HashSet可以自动的帮助我们去重,比如HashSetset = new HashSet<>(list) 等。 接下来看下 HashSet 的内部是怎么实现的。 HashSet的特点 从 HashSet 的 Javadoc 的说明中,可以得到以下信息: HashSet 底层是使用 HashMap 来保存元素的 它不保证集合中存放元素的顺序,即是无序的,且这种顺序可能会随着时间的推移还会改变 允许 null 值,且只有一个 HashSet 不是线程安全的,底层的 HashMap 不是线程安全的,它自然就不是啦,可以使用 Collections.synchronizedSet(new HashSet 集合中的元素不会重复 类图 先来看看 HashSet 的一个类图 ?

    58230发布于 2020-05-21
领券