HashSet 介绍

本文详细介绍了Java中的HashSet类,探讨了HashSet如何依赖HashMap实现存储操作。文章解释了HashSet的特点,包括允许一个null值、不保证元素顺序等,并展示了主要方法的实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HashSet 介绍

标签: java8源码


思路:内部就是用HashMap来存储数据.把set的值存放在map的key中.Haset 可以简单的理解为 HashMap 的key的集合. 因为其,依靠HashMap来完成各种操作.

特点

1.允许使用null,最多一个
2.不保正元素顺序
3.非同步的
4.Iterator会触发快速失败机制

签名

public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, java.io.Serializable{}

重要成员变量

 private transient HashMap<E,Object> map;
 private static final Object PRESENT = new Object();//用来放到HashMap的值中

构造方法

//空构造方法
    public HashSet() {
        map = new HashMap<>();
    }
//初始化大小的构造方法    
    public HashSet(int initialCapacity) {
        map = new HashMap<>(initialCapacity);
    }

    public HashSet(int initialCapacity, float loadFactor) {
        map = new HashMap<>(initialCapacity, loadFactor);
    }

     HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }

    public HashSet(Collection<? extends E> c) {
        map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
        addAll(c);
    }

由此可以看出,HashSet其内部完全是依靠HashMap的来存储数据的.如下面的具体方法介绍也看的出这一点.

add(Object o);方法

  public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }

由此看出,其实调用了map的put来添加元素,并且把值放在了map的key的位置

remove(Object o);方法

    public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }

Iterator();方法

  public Iterator<E> iterator() {
        return map.keySet().iterator();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值