Java集合 HashSet的源码分析及常用方法讲解

一. HashSet概述

  • HashSet是Java集合Set的一个实现类,Set是一个接口,其实现类除HashSet之外,还有TreeSet,并继承了Collection,HashSet集合很常用,同时也是程序员面试时经常会被问到的知识点,下面是结构图
    在这里插入图片描述

二、源码分析

  • 初始化
public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, java.io.Serializable
{
    static final long serialVersionUID = -5024744406713321676L;	//java序列化机制

    private transient HashMap<E,Object> map;	//将不需要序列化的属性前添加关键字transient   是不是很熟悉这个map 哈哈哈

    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();
}
  • 构造器
	//默认构造器
	public HashSet() {
        map = new HashMap<>();
    }
    //将传入的集合添加到HashSet的构造器
    public HashSet(Collection<? extends E> c) {
        map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
        addAll(c);
    }
    //明确初始容量和装载因子的构造器
    public HashSet(int initialCapacity, float loadFactor) {
        map = new HashMap<>(initialCapacity, loadFactor);
    }
    //仅明确初始容量的构造器(装载因子默认0.75)
    public HashSet(int initialCapacity) {
        map = new HashMap<>(initialCapacity);
    }
  1. 看完hashSet的构造器想必大家已经很不陌生了吧,这简直是一个非常完美的偷天换日 皮包公司 哈哈哈(接到活,直接丢给map处理👍
  2. HashMap的数据存储是通过数组+链表/红黑树实现的,存储大概流程是通过hash函数计算在数组中存储的位置,如果该位置已经有值了,判断key是否相同,相同则覆盖,不相同则放到元素对应的链表中,如果链表长度大于8,就转化为红黑树,如果容量不够,则需扩容(注:这只是大致流程)。

hashMap原理及底层实现,储存过程

  • 能懂得map的基本hashSet你就能看明白
  • 这里就简单列出常用方法吧:(就不一一讲述了)
public int size()	// 集合中元素个数

public boolean isEmpty()	// 是否为空

public boolean contains(Object o)	// 是否包含指定元素

public boolean add(E e)	// 添加元素

public boolean remove(Object o)	// 删除元素

public void clear()	// 删除所有元素

java集合 arrayList源码分析add方法自动扩容机制(上)

😁 作者:Teddy (公众号:鸡仓故事汇)
ok!到这里就大功告成,小编(Teddy)在这里先感谢大家的到来。
虽然不是太详细,小编已经很努力,给小编来个一键三连(点赞,关注,收藏),小编会越来越努力。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值