HashSet学习笔记

tips

  • HashSet是依赖于HashMap的一种Set接口的实现。不能保证在对set进行迭代时的顺序,不能保证随着时间变化顺序保持不变。
  • 该实现允许nullHashSet对基础操作add、remove、contains、size提供常数级的性能。迭代时花费的时间与size成比例,所以在初始化容量时,不要将初始化大小设置太高或者将负载因子设置太低。
  • 当再多线程场景下使用时,建议在创建对象时使用以下方法:
 Set s = Collections.synchronizedSet(new HashSet(...));
  • hashSet返回的迭代器都是fail-fast(快速失败)的。在迭代过程中除了使用迭代器自身的remove方法,均会抛出异常ConcurrentModificationException

构造方法

hashSet一共提供5种构造方法

  • 无参构造
public HashSet() { map = new HashMap<>();}
  • 传入集合
// 参数集合c为空时会报NullPointerException
public HashSet(Collection<? extends E> c) {
    map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
    addAll(c);
    }
  • 定义hashMap的初始化大小
public HashSet(int initialCapacity) {
    map = new HashMap<>(initialCapacity);
    }
  • 定义hashMap的初始化大小和负载因子
public HashSet(int initialCapacity, float loadFactor) {
    map = new HashMap<>(initialCapacity, loadFactor);
    }
  • 使用linkedHashMap
// dummy:哑值
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
    map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }

迭代器

迭代器元素其实就是hashSet内置的map的键

public Iterator<E> iterator() {return map.keySet().iterator();}

方法

hashSet提供了一些基础的操作,其实就是沿用的内置map的方法。

  • size()
  • isEmpty()
  • contains()
  • add()
  • remove()
  • clear()
  • clone() :返回一个hashset的浅拷贝,只有实例引用没有元素。
  • spliterator() : 分割迭代器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值