博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDK8集合类源码解析 - HashSet
阅读量:4984 次
发布时间:2019-06-12

本文共 1087 字,大约阅读时间需要 3 分钟。

HashSet

特点:不允许放入重复元素

查看源码,发现HashSet是基于HashMap来实现的,对HashMap做了一次“封装”。

 

private transient HashMap
map; private static final Object PRESENT = new Object(); //map的value

 

  

构造函数

//空的构造函数    public HashSet() {        map = new HashMap<>();    }    //从集合构建    public HashSet(Collection
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); } //从给定的容量构建 public HashSet(int initialCapacity) { map = new HashMap<>(initialCapacity); }

  

基本操作

public boolean add(E e) {    return map.put(e, PRESENT)==null;} public boolean remove(Object o) {    return map.remove(o)==PRESENT;} public boolean contains(Object o) {    return map.containsKey(o);} public int size() {    return map.size();}

最佳实践:

      1 HashSet底层就是HashMap,只要理解了 hashmap,HashSet自然就理解了。

      2 HashSet中的数据不可重复

      3 HashSet线程不安全

      4 实际开发中,如果能够预料set的大小,建议优先使用带容量的构造器,好提高性能。

      我的另一篇文章,

 

转载于:https://www.cnblogs.com/javabigdata/p/7117928.html

你可能感兴趣的文章